0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-01-21

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

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

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

1. 拡張機能を追加

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

スクリーンショット 2025-01-22 0.16.35.png

2. 翻訳対象の英語を準備

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

スクリーンショット 2025-01-22 0.24.48.png

3. Apps Scriptにコードを書く

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

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

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

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

スクリーンショット 2025-01-22 0.26.19.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

スクリーンショット 2025-01-22 0.55.37.png

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?