Googleの翻訳機能、使っていますでしょうか。
翻訳機能は最先端のAI技術を駆使したGoogleの強みであることは間違いないと思います。
その神機能をさらに使い倒す目的で翻訳したい英文や英単語をより便利に一括で一挙に翻訳できるマクロをGoogleスプレッドシートによるGAS(Google Apps Script)で実装してみました。
海外で活躍しようしている社会人や受験勉強に励む学生さん達にとって、少しでも時短になれば幸いです。
百聞は一見に如かず、一目瞭然、一発でイメージが湧き、使い方がわかるようなGIFアニメ付きです。
GASマクロは、初心者の人やExcelVBAに慣れている人からすると抵抗があるかもしれませんが、無料でいつでも始められて取っつきやすいので、ぜひお試しください。
かく言う私もGASの勉強を始めたばかりです。GASを勉強し始めようとしている有志の方々にも何かしら響けば幸いです。私も初心者なので何か不備や間違いがあったらスミマセン。
Googleスプレッドシートに貼り付けて一括翻訳するGASマクロ作成
選択したセルだけを翻訳できた方が融通が利くと思ったので、そんなマクロを作成してみました。
大量のデータを貼り付けても、そんなに時間がかからずに翻訳してくれると思います。
例えば、受験や英検の勉強で覚えた単語の答え合わせなどトントン拍子に行う復習などにも役立つと思います。
GASマクロの操作イメージサンプルテスト例
GASマクロの主な仕様
ザックリとした仕様を箇条書きで記載します。
- 現在アクティブなシートで選択している列のセルを対象に翻訳。(複数列選択していても最初の1列目のみが対象)
- 日本語から英語に翻訳。
- 英語から日本語に翻訳。
- 翻訳した結果を配列にセットし終わった後、その配列を翻訳対象セルの一つ右側に反映。(配列を使わずにダイレクトに一行一行順次反映すると極端に処理が遅くなる)
GASマクロのソースコード
マクロの登録方法は以下を参照いただければと思います。
目的に合っていない場合は適当にカスタマイズしてみてください。GASマクロの勉強にも少しは役立つと思います。
/* 現在選択セル値を日本語から英語に翻訳 */
function selectCellTransJaToEn() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var range = sheet.getActiveRange(); // 選択範囲セル
var transFrom = "ja"; // 日本語
var transTo = "en"; // 英語
// 翻訳処理呼び出し
sheetRangeTranslate(sheet, range, transFrom, transTo);
}
////////////////////////////////////////////////////////////////////////////////
/* 現在選択セル値を英語から日本語に翻訳 */
function selectCellTransEnToJa() {
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var range = sheet.getActiveRange(); // 選択範囲セル
var transFrom = "en"; // 英語
var transTo = "ja"; // 日本語
// 翻訳処理呼び出し
sheetRangeTranslate(sheet, range, transFrom, transTo);
}
////////////////////////////////////////////////////////////////////////////////
/* 対象シートの範囲セル値を翻訳 */
function sheetRangeTranslate(sheet, range, transFrom, transTo) {
var startRow = range.getRow(); // 開始行
var startCol = range.getColumn(); // 開始列
var endRow = range.getLastRow(); // 終了行
var endCol = range.getLastColumn(); // 終了列(未使用)
var j=startCol; // 対象列
var arrayVal = []; // 配列
/********* 一括翻訳処理 *********/
for(var i=startRow;i<=endRow;i++){ // 行ループ
var transVal = ""; // 翻訳値
if (sheet.getRange(i, j).getValue() != "") { // 空ではない場合
// 翻訳処理
transVal = LanguageApp.translate(sheet.getRange(i, j).getValue(), transFrom, transTo);
}
arrayVal.push([transVal]); // 配列に追加
}
// 翻訳後の配列値をアクティブ列の一つ右のセルに反映
sheet.getRange(startRow, startCol+1, endRow-startRow+1, 1).setValues(arrayVal);
}
実行方法
日本語から英語に翻訳したい場合は「selectCellTransJaToEn」、英語から日本語に翻訳したい場合は「selectCellTransEnToJa」を実行してください。
ちなみに、上記の操作画像では、図形オブジェクトにスクリプトを割り当て、マウスで押下して起動しています。メニューバー「ツール-マクロ-(スクリプト)」、またはショートカットキーからも起動可能です。
目的に合っていない場合はカスタマイズしてみてください。
その他の言語の翻訳
英語以外のその他言語に翻訳したい場合は、Googleの下記公式サイトからコードをコピーして、英語版と同様の関数を作成してみてください。
配列使わないVersion(GAS勉強中の方向け)
配列を使わないバージョンも今後のコーディングのための備忘として記載します。
圧倒的にパフォーマンスが違ってくるので。
/* 対象シートの範囲セル値を翻訳(配列使わないversion) */
function sheetRangeTranslate(sheet,range,transFrom,transTo) {
var startRow = range.getRow(); // 開始行
var startCol = range.getColumn(); // 開始列
var endRow = range.getLastRow(); // 終了行
var endCol = range.getLastColumn(); // 終了列(未使用)
var j=startCol; // 対象列
for(var i=startRow;i<=endRow;i++){ // 行ループ
var transVal = ""; // 翻訳値
if (sheet.getRange(i,j).getValue() != "") { // 空ではない場合
// 翻訳処理
transVal = LanguageApp.translate(sheet.getRange(i,j).getValue(), transFrom, transTo);
sheet.getRange(i,j+1).setValue(transVal);
}
}
}
以下操作が上記コードで実装した時の動きです。
明らかにパフォーマンスが悪くなりますね。。。要注意。。。
最後に
Googleスプレッドシートの使い方は人それぞれ、いろんなやり方があると思いますが、一例としてご紹介させていただきました。
GASマクロはExcelVBAとはかなり違いますが、JavaScriptは覚えておいて損はないプログラムだと思うのでショートカットキーなどと組み合わせてぜひ活用してみてください。
Googleスプレッドシート全ショートカットキー一覧はこちら↓↓↓
ちょっと工夫すれば、ちょっとした操作に1分かかっていた作業を10秒でこなすことができるようになる可能性があります。
それだけでも、積み上げれば相当の工数を削減できるはずなので、ぜひ自分に合ったやり方を模索していきましょう。
コメント