MENU

GASで文字列を数式にせずセルへ保存する

当ページのリンクには広告(PR)が含まれていることがあります。
GASで文字列を数式にせずセルへ保存する。=で始まる文字、RAW で保存、数式にしないの処理例。

外部データの=1+1をそのまま残したいのに、シートへ書くと2になる場合は、保存時の値の解釈を確認します。CSVやAPIから受け取った文字列を、利用者がセルへ入力した値と同じように解釈させてよいとは限りません。

Google Sheets APIにはRAWという指定があります。渡した値を解析せず保存するので、文字列として渡した=1+1や00123を、数式や数値へ変えずに残す用途で使えます。ただし、入力自体を数値に変えてから渡すと、失われたゼロは戻りません。

目次

RAWとUSER_ENTEREDの違い

公式のValueInputOptionは、RAWを値をそのまま保存する指定、USER_ENTEREDを画面へ入力した場合のように解析する指定として説明しています。どちらを選ぶかは列の意味で決めます。

商品コードや外部の文章は文字列として保ちたい一方、計算用の数量を数値として扱いたい場合もあります。全列を文字列にして済ませるのではなく、取り込む前の型と保存時の解釈を別々に確認します。

GASでこのAPIを使うには、Apps ScriptのサービスからGoogle Sheets APIを追加します。高度なSheetsサービスは、通常のSpreadsheetAppとは別の入口です。プロジェクトによってはCloud側のAPI有効化も確認してください。

3つの文字列を書き込む練習

練習用ファイルに「文字列練習」シートを作り、A2:A4を空にします。例は数式のような文字列、ゼロで始まるコード、日付のような文字列を並べ、意図せず解釈されやすい値を確認します。

function writePracticeRaw(book, apply) {
  const sheet = book.getSheetByName('文字列練習');
  if (!sheet) throw new Error('文字列練習シートがありません');
  const target = sheet.getRange('A2:A4');
  if (target.getValues().some(row => row[0] !== '') ||
      target.getFormulas().some(row => row[0] !== '')) {
    throw new Error('書き込み先を空にしてください');
  }
  const values = [['=1+1'], ['00123'], ['2026-11-01']];
  if (apply !== true) return {planned: values, wrote: false};
  const result = Sheets.Spreadsheets.Values.update(
    {values: values}, book.getId(), "'文字列練習'!A2:A4",
    {valueInputOption: 'RAW', includeValuesInResponse: true,
      responseValueRenderOption: 'UNFORMATTED_VALUE'}
  );
  const saved = result.updatedData && result.updatedData.values;
  if (JSON.stringify(saved) !== JSON.stringify(values)) {
    throw new Error('保存結果を確認してください');
  }
  return {saved: saved, wrote: true};
}

function previewRawWrite() {
  const APPLY = false;
  console.log(JSON.stringify(writePracticeRaw(
    SpreadsheetApp.getActiveSpreadsheet(), APPLY)));
}

APPLY:falseの間は計画の表示だけです。保存を試す場合はコピーした練習用ファイルでtrueへ変えます。応答から取得した値が3つの文字列と一致しなければ止めます。更新応答の値を返してもらう指定はvalues.updateで確認できます。

保存後に画面で確かめる

A2は2ではなく=1+1、A3は00123、A4は日付の文字列であることを確認します。A2を選び、数式として計算されていないかも見てください。書き込みが終わった後に再実行すると、保存先に値があるためエラーになります。

この確認は、見た目の文字だけを比べるためのものではありません。式を保存した場合でも数式バーに同じ文字が見えることがあるため、計算結果やセルの型も合わせて確かめます。出力先が変わった際は、保存設定を引き継いだつもりで進めないようにします。

RAWで保存しても、後で別の人や別の処理が値を再入力・変換すれば、解釈が変わる場合があります。別サービスへ書き出す際は、その受け取り側にも同じ確認が必要です。文字列として安全に保存したことと、以後のすべての操作で数式化しないことは分けます。

実行していない範囲

ローカルではSheetsサービスの代用で、preview時の無変更、RAW指定、保存応答の一致と不一致、既存値の拒否を確認しました。Google上でのAPI有効化・承認・値の解釈は未確認です。外部から届いた本物のデータを使う前に、上の小さな入力で確かめてください。

元の文字列を整える段階はCSVを書き出すときの扱い、通常の範囲操作はスプレッドシートの読み書きも参考になります。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次