Googleスプレッドシートの英語を翻訳してみた話


ふいに「スプレッドシートで5千行ある英語を1行ずつ翻訳して隣の行に書いていた。」というポストを見た。

「プログラムでできるんじゃない？」そして簡単そうだな〜ということで、Google Apps Script (GAS) を触ってみることにしました。

## GASを使って翻訳プログラムを作成

### 1. 拡張機能を追加
まず、スプレッドシートに「Apps Script」を使えるようにしました。  
拡張機能をインストールし、ツールバーの「拡張機能」→「Apps Script」から開きます。


![スクリーンショット 2025-01-22 0.16.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978958/c13faf42-44dc-4024-3670-b0b5c3e8a946.png)

### 2. 翻訳対象の英語を準備
翻訳する英語をどこかのブログサイトから拝借。スプレッドシートのA列に入力しました。

![スクリーンショット 2025-01-22 0.24.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978958/cbdc6711-5864-29d2-e58a-85bf2342cb6e.png)

### 3. Apps Scriptにコードを書く
スクリプトを書くために、「Apps Script」を開きます。こんな感じでコードを書くことができるウィンドウが開きました。


ツール横の拡張機能から「Apps Script」を選択。

新しいウィンドウが出てきた。

よくわからないけどここにコードを入れていくようだ。

![スクリーンショット 2025-01-22 0.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978958/d6429189-36a7-ab8f-bd79-66c71e326aad.png)

書いていく。

    function translateWords() {
関数名

    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
////

    spreadsheetApp

スプレッドシートのオブジェクト

    getActiveSpreadsheet()

今開いているスプレッドシートの情報もらう

    getActiveSheet()

現在選択中のシートタブを取得

これを行うと操作中のシートでコードが利用できるようになる。


A列のデータ取得
    
    const range = sheet.getRange("A:A");
    const values = range.getValues(); 

////

    getRange = sheet.getRange("A:A")

シートのA列を全体を範囲として取得。

    getValuer()

セルの値を配列形式で取得

A列の単語を1つずつ処理する

    for (let i = 0; i < values.length; i++) {
      const englishWord = values[i][0]; 
      if (englishWord) { 
        const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
        sheet.getRange(i + 1, 2).setValue(translatedWord); 
          }
    }

for文
なんか懐かしい書き方だ。
JavaScriptのテキストをやった時にこんな文法だった気がする。

    let i = 0 
    
処理の最初は配列0からです。

    i<values.length

iに入っている値の長さ一個手前まで繰り返す。
iは基本0も含めるから長さでいうとi+1になるはず。

i++
処理が終わったら1足す。

    const englishword = values[i][0];
    
valueは2次元配列らしい。
なのでiの位置を指定してあげる。

    const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
////

    LanguageApp.translate
    
これはgoogleが持っている翻訳機能。
englishwordで文字列を取得している。
翻訳元を英語
翻訳先は日本語に設定。

    sheet.getRange(i + 1, 2).setValue(translatedWord);

///

    get Range(i + 1,2)
    getRange(行,列)

    
行番号配列iは0からスタートしているため
ここで私はi+1ではなく1でやっていて1行目が凄いことになっていた。。。。

    setValue(translatedWord)
    
これでB列に書き込み！


    if (englishWord) { 
  
    }
これで囲むと空白はスキップしてくれる。
早く処理ができるらしい

出来たコードがこちら

    
    function translateWords() {
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
      const range = sheet.getRange("A:A");
      const values = range.getValues(); 
      
    
      for (let i = 0; i < values.length; i++) {
            const englishWord = values[i][0]; 
            if (englishWord) {
              const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
              sheet.getRange(i + 1, 2).setValue(translatedWord); 
            }
      }
    }

そして実行を押すと


![スクリーンショット 2025-01-22 0.55.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978958/d18a7131-ecca-5aa8-bdac-ebc74fd912cc.png)


![スクリーンショット 2025-01-22 0.55.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978958/5fa8bf9e-9ad9-6488-d2a0-ba7d3b2472bf.png)


何に使えるかわからないけど。。。。
ちょっと楽しい遊びでした。

あれもできるんじゃないか？
と思いつくものは大体できそうだ。
簡単なものならね。
ちょっとした息抜きしてみました。