見出し画像

Googleスプレッドシートで翻訳(GAS活用その後)

以前、Googleスプレッドシートで翻訳について記事を書きました。

汎用的なことを記事で書きましたが、普段の仕事が楽になるように、その後もコードは書き換えています。

■英文和訳以外に対応する

上述の記事では、和訳&置換表で訳語を調整するコードを紹介しました。

function translateIntoJa() {
 
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('シート1');
 const values      = sheet.getDataRange().getValues();
 const lastRow   = sheet.getLastRow();
 const gResults      = [];
 const results      = [];
 const sheetTable = spreadsheet.getSheetByName("置換表");
 
 // 見出しを除いて、A列のデータを取得
 for(let i = 1; i < values.length; i++){
   const sourceColumn  = values[i][0];
 // 英語から日本語に翻訳
   const exportColumn  = LanguageApp.translate(sourceColumn, "en", "ja");
   
   gResults.push([exportColumn]);
 }

  // 置換表を全て取得
  const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
 
 // 翻訳データを変換表の値に照らし合わせて置換(=分離&結合)
  for(let i = 0; i < gResults.length; i++){

  let fromStr = gResults[i][0];

  for (const j in tableValues) {
    fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
  }
  results.push([fromStr]);
 }
 sheet.getRange(2, 2, lastRow-1).setValues(results);
}

職場でも共有しましたら、和訳だけでなく、英訳をしたい。との声が早速貰いました。当然ですよね(笑)。技術的には、

const exportColumn = LanguageApp.translate(sourceColumn, "en", "ja");

const exportColumn = LanguageApp.translate(sourceColumn, "ja", "en");

と書き換えるだけですけど、使い勝手を考える必要があります。

和訳ファンクションと英訳ファンクションと2つ作り、それぞれを動作させるボタンを用意するのは簡単です。

でも、英語・日本語だけでなく、他の言語も対応させようとすると、途端に煩雑になります。対応させたい言語の数が3なら6パターン、4なら12パターン、nならn(n-1)/パターンと爆発的に増えるんで。

そこで言語コードリストをシートに埋め込み(設定は後述)、

1つのファンクションで処理できるように書き換えます。

function translateByGoogle() {
 
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('翻訳');
 const langCode = sheet.getDataRange().getValues();
 const sourceLang = langCode[0][2];
 const targetLang = langCode[0][3];
 const values      = sheet.getDataRange().getValues();
 const lastRow   = sheet.getLastRow();
 const gResults      = [];
 const results      = [];
 const sheetTable = spreadsheet.getSheetByName("置換表");
 
 // 見出しを除いて、A列のデータを取得
 for(let i = 1; i < values.length; i++){
   const fromColumn  = values[i][0];
 // 言語コード(fromとto)を参照して翻訳
     const toColumn  = LanguageApp.translate(fromColumn, sourceLang, targetLang);

   
   gResults.push([toColumn]);
 }
  
  // 置換表を全て取得
  const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
 
 // 翻訳データを置換表の値に照らし合わせて置換(=分離&結合)
  for(let i = 0; i < gResults.length; i++){

  let fromStr = gResults[i][0];

  for (const j in tableValues) {
    fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
  // Logger.log(fromStr);
  }
  results.push([fromStr]);
  // Logger.log(results);
 } 
 // B列に置換済み翻訳データを記入
 sheet.getRange(2, 2, lastRow-1).setValues(results);

}

このコードを保存し、画像アイコンにスクリプトを割り当てれば完成です。

例:Google翻訳画像に翻訳スクリプトを割り当て

コード解説

言語コードは、
C1セルは、langCode[0][2] をsourceLang に、
D1セルは、langCode[0][3] をtargetLangで取得し、

const toColumn = LanguageApp.translate(fromColumn, sourceLang, targetLang);

と書き換えてます。上記のコードで翻訳はできますが、置換表の処理は和訳のみ有効なので、それ以外は不要な処理です。そのため、 if (targetLang == 'ja')の時だけ置換処理し、他の言語コードは訳語データをすぐ貼り付けるようにして完成です。

function translateByGoogle() {
 
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('翻訳');
 const langCode = sheet.getDataRange().getValues();
 const sourceLang = langCode[0][2];
 const targetLang = langCode[0][3];
 const values      = sheet.getDataRange().getValues();
 const lastRow   = sheet.getLastRow();
 const gResults      = [];
 const results      = [];
 const sheetTable = spreadsheet.getSheetByName("置換表");
 
 // 見出しを除いて、A列のデータを取得
 for(let i = 1; i < values.length; i++){
   const fromColumn  = values[i][0];
 // 言語コード(fromとto)を参照して翻訳
     const toColumn  = LanguageApp.translate(fromColumn, sourceLang, targetLang);

   gResults.push([toColumn]);
 }

  if (targetLang == 'ja')
  {
  
  // 置換表を全て取得
  const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
 
 // 翻訳データを置換表の値に照らし合わせて置換(=分離&結合)
  for(let i = 0; i < gResults.length; i++){

  let fromStr = gResults[i][0];

  for (const j in tableValues) {
    fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
  // Logger.log(fromStr);
  }
  results.push([fromStr]);
  // Logger.log(results);
 } 
 // B列に置換済み翻訳データを記入
 sheet.getRange(2, 2, lastRow-1).setValues(results);

 }else
 // B列に翻訳データを記入
 sheet.getRange(2, 2, lastRow-1).setValues(gResults);

}

Google翻訳サービスでは3言語まで上部に並び、

レギュラー(?)入れ替えはリストから選択です。今回のGASコードで翻訳言語を増やす場合は、

で調べ、C1とD1セルを選択し、メニュー:データ→データの入力規則

,(カンマ)区切りで追加するだけです。

次回はシートを消去するスクリプトを紹介します。


この記事が気に入ったらサポートをしてみませんか?