しごと自動化レシピ

WORK RECIPE GAS

数式の計算結果を値だけの控えシートへ保存する

数式入りの台帳を、現時点の値だけを持つ別シートに写します。原本の式を残し、控え名がすでにあれば停止するコードで、過去の控えを上書きしない形にします。

実行確認の記録なし

公式資料を参照して構成した手順です。本記事の操作・コードの実行は未確認です。小さな入力例で期待結果を確かめてから利用してください。

できあがるもの

値控えに同じ2行3列ができ、C2は数値600になります。原本の数式は残ります。再実行すると出力名の重複で停止し、既存控えを置き換えません。

始める前に

  • ブラウザ版Googleスプレッドシートの編集権限と紐付きApps Script
  • コピーした検証用ファイルで実行。Apps ScriptはV8ランタイムを利用
  • 「原本」シートは1000行・20列以内、出力名「値控え」は未使用
入力例

原本!A1:C2を「品名,数量,金額」「ノート,2,=B2*300」にします。C2の表示は600です。

手順

  1. 原本を含むファイルをコピーし、「拡張機能」からApps Scriptを開きます。計算が終わってC2が600と表示されていることを確認してください。
  2. 以下をスクリプトへ貼り付けて保存します。独立した例なので、ほかの記事の同名関数があるプロジェクトには混ぜません。 /** @OnlyCurrentDoc */ function snapshot() { const ss=SpreadsheetApp.getActive(), s=ss.getSheetByName('原本'); if(!s || ss.getSheetByName('値控え')) throw Error('入力または出力名を確認'); if(s.getLastRow()>1000 || s.getLastColumn()>20) throw Error('対象が大きすぎます'); const values=s.getDataRange().getValues().map(r=>r.map(v=> typeof v==='string' && /^[=+\-@]/.test(v) ? "'"+v : v)); ss.insertSheet('値控え').getRange(1,1,values.length,values[0].length).setValues(values); }
  3. 関数snapshotを手動実行します。初回の権限確認では対象ファイルの操作内容を確認してください。この例はメール送信や外部への通信を行いません。
  4. 値控え!C2を選び、入力欄が数式でなく600か確認します。原本B2を3へ変えても控えは600を保つか試し、原本B2を2へ戻します。

期待結果と照合する

値控えに同じ2行3列ができ、C2は数値600になります。原本の数式は残ります。再実行すると出力名の重複で停止し、既存控えを置き換えません。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • 表示形式・列幅・画像・注釈はコピーしません。日付や通貨の見た目は必要に応じて控え側に設定します。
  • 文字列が数式として再評価されないよう、式に見える先頭文字にはアポストロフィを付けています。

止める・元に戻す

値控えシートだけを手動で削除します。原本の数量テストを2へ戻し、Apps Scriptのsnapshot関数を消せば撤回できます。

公式資料・対応範囲

参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

GASの記事一覧へ →