スプレッドシート

B列の英語をC列に日本語として翻訳

=IF(B2="","",GOOGLETRANSLATE(B2,"en","ja"))

B列の日本語をC列に英語として翻訳

=IF(B2="","",GOOGLETRANSLATE(B2,"ja","en"))

下記はC列の関数を値化してD列にいれるためのスクリプト

/***** 設定:対象タブ名(そのまま書いてOK)*****/
const SHEET_NAMES = ['シートName1', 'Name2', 'Name3'];
const SOURCE_COL  = 3;  // C列(読み取り)
const TARGET_COL  = 4;  // D列(書き込み)
const HEADER_ROW  = 1;  // 見出し行

// タブ名の揺れを吸収(全角/半角・前後空白)
function _normalizeName_(s){ return String(s).normalize('NFKC').trim(); }
function _isTargetSheet_(name){
  const n = _normalizeName_(name);
  return SHEET_NAMES.map(x=>_normalizeName_(x)).includes(n);
}

function onEdit(e){
  if (!e) return;                      // ▶実行では動かさない
  const sh = e.range.getSheet();
  if (!_isTargetSheet_(sh.getName())) return;

  const startRow = e.range.getRow();
  const numRows  = e.range.getNumRows();
  const col      = e.range.getColumn();
  if (startRow <= HEADER_ROW) return;  // 見出しは無視
  if (col === SOURCE_COL) return;      // C直編集は式保護のため何もしない

  SpreadsheetApp.flush(); // Cの再計算待ち
  const src = sh.getRange(startRow, SOURCE_COL, numRows, 1).getDisplayValues();
  const out = src.map(r => [r[0] || ""]);
  sh.getRange(startRow, TARGET_COL, numRows, 1).setValues(out);
}

// 既存分を一括同期(必要な時だけ手動で▶実行)
function copyAll_forAllSheets(){
  const ss = SpreadsheetApp.getActive();
  SHEET_NAMES.forEach(name=>{
    const sh = ss.getSheetByName(name);
    if (!sh) return;
    const last = sh.getLastRow();
    if (last <= HEADER_ROW) return;
    SpreadsheetApp.flush();
    const rows = last - HEADER_ROW;
    const src  = sh.getRange(HEADER_ROW+1, SOURCE_COL, rows, 1).getDisplayValues();
    sh.getRange(HEADER_ROW+1, TARGET_COL, rows, 1).setValues(src.map(r=>[r[0] || ""]));
  });
}

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA