Google Apps Scriptを使って、日本語のExcelシートをまとめて英訳する

Excelを英語に翻訳する

海外とのやりとりがある企業に勤めていると、Excelシートの情報などを英語に翻訳しなければいけないことがあります。

もちろん英語に自信のある方は特にリファレンスなしでサクっと翻訳できてしまうのかもしれませんが、私のようにWeblioの英和辞書やGoogle翻訳Excelシートを行ったりきたりする方も多いかと思います🤔

今回は、GAS (Google Apps Script)を使って、セルの中身の翻訳を自動で行う方法をご紹介したいと思います。

GAS (Google Apps Script)を使ってセルの翻訳を自動化する

セルの翻訳を自動化するには、以下のプロセスをプログラムで行えればよさげです。

  1. セルの中身を取得する
  2. セルの中身をGoogle翻訳にかける
  3. 翻訳結果をセルに書き込む

では、以下の手順で行ってみましょう。コードがよくわからない方も、とりあえずコピペで簡単に実装することができます。

1. Google Spreadsheetを開く

今回はGoogle Spreadsheetを使っていくため、以下のリンクからGoogle Spreadsheetを開いてください。

www.google.com

ちなみに:Google Apps Scriptとは

Google Apps Script(GAS)とは、Google Spreadsheet上で使えるスクリプトのことで、さまざまな作業を自動化したり、外部のサービス(API)と連携をすることができます

ExcelにはマクロやVBAという機能が付いていますが、それのGoogle Spreadsheet版だと思ってもらえれば結構です。

2. 翻訳元のデータを入れ込む

新規ファイルを開くと以下のような画面になるので、A列に翻訳をしたい文を入れていきましょうExcelシートなどから、翻訳をしたい文をコピーして貼り付ければOKです🙆‍♂️

f:id:ekanoh:20180807232903p:plain

3. スクリプトエディタを開く

ここでおもむろに[ツール] > [スクリプトエディタ] とクリックし、スクリプトエディタを開きます。

f:id:ekanoh:20180807232948p:plain

4. スクリプトエディタにコードを書き込む

何やら仰々しい画面が出てきましたね。

これはスクリプトエディタと言って、Google Apps Scriptと呼ばれるプログラムを書き込めるスペースになります。

以下のコードをコピペして貼り付けてみてください。

function translateAll() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var lastrow = sheet.getLastRow();
  
  for(var i = 1; i <= lastrow; i++) {
    var word_ja = sheet.getRange(i,1).getValue();
    var word_en = translate(word_ja, "ja", "en");
    sheet.getRange(i,2).setValue(word_en);
  }
}

function translate(originalValue, translateFrom, translateTo) {
  return LanguageApp.translate(originalValue, translateFrom, translateTo);
}

コードを貼り付けたら、Ctrl+Sまたは[ファイル] > [保存]で名前を付けて保存しておきましょう。(名前はテキトーでOKです。)

無事に貼り付けれていたら、以下のような見た目になっているはずです💁‍♂️

f:id:ekanoh:20180807233246p:plain

5. スクリプトを実行する

それではプログラムを動かしていきましょう。以下の2ステップでOKです。

  1. 図のプルダウンメニューをmyFunctionからtranslateAllに変更する
  2. プルダウンメニューの左にある再生ボタン(▶)をクリック

f:id:ekanoh:20180807233914p:plain

(※ここで実行許可を求められた場合は許可しておきましょう)

ちなみに:制限について

短時間かつ大量に翻訳させる場合Googleのサーバーに負荷がかかるためリクエストが拒否される場合がありますので、その場合は複数回に分けて行えばOKです。(Twitterが「バルス」でサーバー落ちするのと同じ原理です。用法容量にお気を付けください💊)

6. 自動で翻訳される

無事に実行されると、以下のように自動で翻訳が進んでいくはずです。

翻訳にはGoogle翻訳を使っているため、かなり高精度に翻訳されていますね。

f:id:ekanoh:20180807234647g:plain

例文 Example Sentence
個人の意志は尊重しなければいけない。 We must respect individual will.
悲観的な人生観を捨てて、前向きな態度を常に持ち続けよう。 Let's abandon your pessimistic view of life and keep a positive attitude all the time.
香水のほのかな香りを漂わせながら、一人の女性が僕の前を通り過ぎた。前の彼女のことを思い出してしまった。 A woman passed by me, with a faint scent of perfume drifting. I remembered her about before.
現代文学に詳しいですが?」 「ほとんど知りません。」 "Are you familiar with contemporary literature?" "I do not know very little."
予期していたとおり、失業率は3四半期連続で上昇した。 As expected, the unemployment rate rose for the third consecutive quarter.

ちなみに:精度について

Google翻訳では固有名詞や不完全な文章でもある程度よしなに翻訳してくれますが、どうしても、意味をなさない文章を出力する場合や解釈が間違っていることがあります。(たとえば上の例では「前の彼女」などがうまく訳せていませんよね。)

そのため、精度にこだわる場合は目視で確認しておいた方が無難です。

6-2. 単発でも翻訳できる

また、少量の文章を翻訳したいだけの場合は、 =TRANSLATE(翻訳元のセル, "ja", "en")とセルに直接関数を書いてもOKです。

f:id:ekanoh:20180807235133p:plain

※こちらの方法でも上記の「4. スクリプトエディタにコードを書き込む」は必要です。

ちなみに:日本語訳(日→英)したい場合

上記の例は英訳でしたが、日本語訳にすることもできます。

コードの7行目から9行目を以下に変更してみてください。

    var word_en = sheet.getRange(i,1).getValue();
    var word_ja = translate(word_en, "en", "ja");
    sheet.getRange(i,2).setValue(word_ja);

ja(=Japanese)とen(=English)を入れ替えているだけですね|д゚)

セルに関数を書く場合でも、=TRANSLATE(翻訳元のセル, "en", "ja")とすればOKです🙆‍♂️

まとめ

Google Apps Script(GAS)を使えば、以下のような作業を自動化することができました👏🏼

  1. セルの中身を取得する
  2. セルの中身をGoogle翻訳する
  3. 翻訳結果をセルに書き込む

実は、Google翻訳以外にも、他サービスが提供しているAPIを通じて天気予報や株価などを取得したり、さまざまな作業を自動化することができます。業務効率化に大変役立ちますので、自動化に興味のある方は以下のような書籍を参考にしつつ学習を進めてみてください。