共有しているスプレッドシートを開いたら、昨日まで正しかった数式が別の式に変わっている。あるいは数式そのものが消えて、ベタ打ちの数字だけが残っている。こうした「勝手に書き換わる」は、スプレッドシートを複数人で使い始めた組織でほぼ必ず一度は起きます。
結論:原因は4系統しかない。まず変更履歴で「人の操作か」を切り分ける
数式が勝手に書き換わったと感じたとき、実際に起きていることは次の4系統のどれかにほぼ収まります。(1)誰かの操作で上書きされた(コピペ・オートフィル・ベタ打ち)、(2)行や列の挿入・削除で参照の範囲がずれた、(3)相対参照のまま複製したので参照先が動いた、(4)数式は変わっていないが表示される結果だけが変わった(フィルタ・並べ替え・ARRAYFORMULA の展開失敗)です。
切り分けの最初の一手は決まっています。該当セルを右クリックして「編集履歴を表示」を開くこと。ここに別の人の名前と時刻が出れば(1)、何も出ないのに結果が変わっているなら(2)(4) の可能性が高い、という判断ができます。Google 公式ヘルプも、スプレッドシートではセル単位で「右クリック → 編集履歴を表示」で誰がいつ変えたかを確認できると明記しています。ただし行や列の追加・削除、セルの書式変更はこのセル履歴には出てこないため、そこで空振りしたらファイル全体の変更履歴へ上がる、という順番になります。
以下では、症状から原因を引き当てる表を先に置き、そのあと「誰がいつ書き換えたかの特定」「元に戻す」「再発を止める」を手順で追います。
症状 → 原因 → 最初の一手(早見表)
見えている症状 | いちばん多い原因 | 最初の一手 |
|---|---|---|
数式が消えて数字だけ残っている | 値貼り付け・ベタ打ちでの上書き | セルを右クリック →「編集履歴を表示」で実行者と時刻を特定 |
数式の参照先が別のセルになっている | 相対参照のままコピー/切り取り貼り付け | 数式バーで参照を確認し、固定したい箇所に $ を付け直す |
縦一列の数式が全部同じ行を見ている | オートフィル(またはCtrl+D)で先頭行の式を引き延ばした | Ctrl+~ で全数式を表示し、ずれている列をまとめて確認 |
合計が急に小さく(大きく)なった | 集計範囲の内側/外側に行や列が挿入された | SUM などの範囲が今もデータ全体を覆っているか確認 |
#REF! が出ている | 参照先の行・列・シートが削除された | ファイル全体の変更履歴で削除の瞬間まで戻る |
自分の画面だけ行が消えている/順番が違う | 他の人がフィルタや並べ替えを実行した(数式は無傷) | データ →「フィルタを削除」で解除。以後はフィルタ表示を使う |
数式は1つなのに結果が1行しか出ない | ARRAYFORMULA の展開が止まっている | 展開先のセルが空か、範囲の行数が揃っているかを確認 |
別シートから引いた値が全部エラー | IMPORTRANGE のアクセス許可切れ・参照元の構造変更 | 参照元を開き、範囲とシート名が存在するかを確認 |
この表の上半分(人の操作)と下半分(仕組みのずれ)は、対処の性質がまったく違います。上半分は「犯人と元の式を特定して戻す」話で、下半分は「数式の書き方と運用ルールを変える」話です。どちらなのかを決めないまま直し始めると、戻したはずの式が翌日また同じ形で壊れます。
原因1:共同編集中に他人のフィルタ・並べ替えで参照がずれる
もっとも誤解されやすいのがこれです。「自分の画面の行が勝手に減った」「表の並び順が変わって数式が別の行を指している」という症状のとき、多くの場合数式は1文字も変わっていません。変わったのは表の見え方です。
フィルタは全員に効く。フィルタ表示は自分だけに効く
Google 公式ヘルプは、通常のフィルタについて「スプレッドシートにアクセスできるすべてのユーザーに同じフィルタが適用」され、編集権限のあるユーザーなら誰でも変更できると説明しています。対してフィルタ表示(フィルタビュー)は複数のフィルタを個別に保存でき、「複数のユーザーが同時に別々のフィルタ表示を使用」できます。つまり共有シートで絞り込みたいときに使うべきはフィルタではなくフィルタ表示です。
手順も別です。フィルタは データ →「フィルタを作成」、フィルタ表示は データ →「フィルタビューを作成」。この1クリックの違いが、他の人の画面を巻き込むかどうかを決めています。なお編集権限を持たない人が絞り込みや並べ替えを行った場合は、一時的なフィルタ表示が自動で作られる扱いになるため、閲覧専用の相手は最初から他人に影響しません。事故は編集権限を持った人が通常のフィルタを使うときに起きます。
この挙動そのものの詳細と、閲覧権限しかない場合の扱いはスプレッドシートのフィルタが他の人にも影響する時の対処で手順まで分解しています。
並べ替えだけは「見え方」で済まない
フィルタと違い、並べ替え(ソート)は実際にデータの行位置を入れ替えます。ここが本当に危ないところです。A列からD列だけを選択して並べ替えると、同じ行にあったE列以降は動かないので、行同士の対応が崩れます。隣の列に相対参照の数式を置いていれば、その数式は「ずれた後の行」を見に行くことになります。
実務での原則はひとつです。並べ替えは表全体(またはヘッダー行を除いた全列)を選んでから行う。列を部分選択して並べ替えるのは、共有シートでは禁止行為に近いと考えて構いません。並べ替えで崩れた対応関係は、数式を直しても元に戻りません。版の復元しか手がなくなります。
原因2:行・列の挿入/削除で範囲がずれる
行や列を挿入すると、スプレッドシートは参照をある程度自動で追従させます。問題は「追従してほしい場合」と「してほしくない場合」の両方があることです。
範囲の“外側ちょうど”に挿入した行は集計に入らない
たとえば =SUM(B2:B50) と書いてあるシートで、51行目に新しいデータを足した場合。この行は範囲の外側なので、合計には一切反映されません。数式は壊れていないしエラーも出ないので、誰も気づかないまま合計だけが小さいという、もっとも発見が遅れるタイプの事故になります。月次の数字が微妙に合わない原因の多くはこれです。
対策は範囲の指定方法を変えることです。列全体を見る =SUM(B2:B) の形にすれば、下に足された行は自動で入ります。固定の行数で範囲を切るのは、行が増えない表(マスタ・設定値)だけに限るのが安全です。
参照先を削除すると #REF! になる
逆に、数式が参照している行・列・シートを削除すると、追従しようがないので #REF! が出ます。これは「壊れたことが画面に出てくれる」ぶん親切なエラーで、気づける時点でまだ助かっています。問題は、#REF! の出たセルをそのまま削除したり、数字をベタ打ちで埋めて“直した”ことにしてしまう対応です。そうすると翌月以降その列は計算されません。
#REF! を見たら、直す前に「何が削除されたのか」をファイル全体の変更履歴で確認してください。削除された行自体が必要なデータだった可能性があります。
ARRAYFORMULA の下に行を挿入すると展開が止まる
ARRAYFORMULA は1つのセルに書いた数式が下方向へ展開される仕組みです。Google 公式ヘルプの構文は ARRAYFORMULA(配列数式) で、数式の編集中に Ctrl+Shift+Enter を押すと先頭に ARRAYFORMULA( が自動で追加されます。
この展開は展開先のセルが空であることが前提です。誰かが途中の行に値を入力したり、行を挿入してそこに何かを置いた瞬間、展開が止まって「1行しか出ない」「配列結果は展開されませんでした」という状態になります。数式を書き換えた人は誰もいないのに結果が変わるので、「勝手に書き換わった」と認識されがちな症状です。
この系統の切り分け(配列を返していない/展開先が埋まっている/範囲の行数が食い違っている)はスプレッドシートでARRAYFORMULAが効かない原因と1行しか出ない時の対処にまとめています。
原因3:コピペとオートフィルで数式が上書きされる
ここが「本当に人の手で書き換わっている」領域です。そして共有シートの事故原因としては最多です。
値貼り付けで数式そのものが消える
他のシートやメール本文からコピーした内容を普通に貼り付けると、貼り付け先にあった数式は上書きされて消えます。元の数式はどこにも残りません。数式が入っていた列にベタ打ちの数字だけが並んでいたら、まずこれを疑ってください。
貼り付ける側にできる予防は、貼り付け先が数式の列かどうかを貼る前に見ること。運用としてより効くのは、後述する「入力する列と計算する列を分ける」設計です。人間の注意力に頼る対策は、人が増えた時点で必ず破れます。
相対参照のままコピーすると参照先が動く
スプレッドシートの参照は既定で相対参照です。=B2*C2 を1行下へコピーすれば =B3*C3 になります。これは便利な挙動ですが、固定したい参照(税率・単価マスタ・設定シートの1セル)が入っている式をコピーすると、固定すべき参照まで一緒にずれます。
固定には $ を使います。$B$2 は行も列も固定、B$2 は行だけ固定、$B2 は列だけ固定です。数式の編集中に該当の参照へカーソルを置き、F4(Mac では Fn+F4)を押すと絶対参照の切り替えが循環します。Google 公式のショートカット一覧にも「絶対参照/相対参照の切り替え」として F4 が載っています。
実務では、固定したい値を数式に直接書かず設定用シートの1セルに置き、そこを絶対参照で引く形が壊れにくいです。税率や手数料率を各行の式に埋め込むと、改定のたびに全行を触ることになり、そのたびに書き換え事故の機会が増えます。
「切り取り→貼り付け」はコピーと挙動が違う
見落としやすい差です。セルをコピーして貼ると参照は相対的にずれますが、切り取って貼ると、そのセルを参照していた他の数式は移動先を追いかけます。つまり「参照のずれを避けたいなら切り取り、式の形を複製したいならコピー」という使い分けになります。表の整理中に切り取り貼り付けを繰り返すと、数式の参照が意図しないセルへ連れていかれることがあるので、レイアウト変更は作業前に版に名前を付けてから行うのが安全です。
オートフィルは「下の式を上の式で塗り潰す」操作
セル右下のハンドルをドラッグするオートフィル、あるいは Ctrl+D(下方向へコピー)・Ctrl+R(右方向へコピー)は、範囲内の既存の数式を問答無用で上書きします。列の途中だけ別の計算をしていた行(例外処理をしていた行)は、この操作で静かに消えます。
そして消えたことは画面上ほぼ分かりません。Ctrl+~ で全セルの数式を表示に切り替えると、列の中で式の形が揃っているかどうかを目で一気に確認できます。月初の点検として、主要な計算列をこの表示で1回眺めるだけでも事故の発見は早くなります。
誰がいつ書き換えたかを特定する
「もう直したからいい」で済ませると、同じ人が同じ操作を繰り返します。責任追及のためではなく、どの操作が危ないかを本人に伝えるために、必ず特定までやります。
セル単位:右クリック →「編集履歴を表示」
いちばん速い方法です。対象のセルを右クリックして「編集履歴を表示」を選ぶと、そのセルの変更が時系列で出ます。誰が・いつ・何から何へ変えたかがセル1つの粒度で分かるので、「この合計だけおかしい」という問い合わせにはこれで即答できます。
ただし公式ヘルプが明記している通り、「行または列の追加、削除」と「セルの形式の変更」はこのセル履歴には表示されません。原因2(挿入・削除による範囲ずれ)はここで見えないので、空振りしたら次のファイル全体の履歴に上がってください。
ファイル全体:変更履歴を開く
経路は3つあります。ファイル →「変更履歴」→「変更履歴を表示」、画面右上の最終編集アイコンをクリック、または Ctrl+Alt+Shift+H(Mac は ⌘+Option+Shift+H)です。右側のパネルに版が時系列で並び、選ぶとその時点のシートが表示されます。
スプレッドシートの変更履歴は既定で「変更されていない行」が非表示になります。どこが動いたのかを探す手間が省ける一方、「消えた行」を探しているときは表示が足りないことがあるので、パネルの表示設定を切り替えて全体を見てください。
なお編集権限がないユーザーは変更履歴を表示できません。閲覧権限で共有している相手に「履歴を見て確認してください」と依頼しても見られないので、調査は編集権限を持つ側で行う前提になります。
ドライブ側の操作履歴も併せて見る
ファイルの中身ではなく、ファイル自体に何が起きたかを知りたいときは Google ドライブの操作履歴です。公式ヘルプによると、編集やコメントの追加、ファイル・フォルダの名前変更、移動や削除、新規ファイルのアップロード、共有の開始・停止が履歴に表示されます。「シートごと見つからない」「いつから共有相手が増えたのか」といった調査はこちら側です。
調査の前に、現状に名前を付けておく
これは手順というより習慣の話ですが、効きます。ファイル →「変更履歴」→「最新の版に名前を付ける」で、今の状態に「2026-10-15 調査開始前」などの名前を付けてから触り始めてください。履歴パネルで既存の版を選び、その他アイコンから「この版に名前を付ける」でも同じことができます。
名前のない版は時刻だけが並ぶので、調査中に何度も復元を試すと「どれが元の状態だったか」が分からなくなります。復元という操作自体も履歴に残るため、名前を付けておけば安心して行き戻りできます。
元に戻す:版の復元とセル単位の修復
戻し方は3段階あります。壊れた範囲の広さで選びます。
シート全体が壊れているなら版の復元
変更履歴パネルで戻したい版を選び、上部の「この版を復元」をクリックして確認ダイアログの「復元」を押します。これでファイル全体がその時点に戻ります。
注意点は、戻るのはファイル単位だということ。壊れた1列を戻すために版を復元すると、その後に他の人が入力した正しいデータも一緒に消えます。共有シートでこれをやると被害が広がるので、復元の前に関係者へ一声かけるか、次に書く部分復元の方法を採ってください。
一部だけ戻す:旧版を開いてコピーする
実務でいちばん使うのはこの形です。復元せずに旧版を表示した状態で、壊れる前の数式が入っているセルを選んでコピーし、現在の版に戻って貼り付けます。これで「数式だけ元に戻し、他の人の新しい入力は残す」ができます。
数式そのものを文字として取り出したいときは、旧版を表示した状態で Ctrl+~ を押すと全セルが数式表示になるので、見ながら書き写せます。1セルだけの修復であれば、セルの編集履歴に表示されている変更前の値をそのまま打ち直すのがもっとも速いです。
シートごと・ファイルごと消えている場合
「数式が書き換わった」と思っていたら、実際にはシートごと削除されていた、というケースもあります。この場合は変更履歴ではなくゴミ箱と復元手順の話になるので、スプレッドシートを誤削除した時の復元手順(ゴミ箱と変更履歴)の症状別の流れをたどってください。ファイルごと・シートだけ・中身だけで打ち手が変わります。
私たちがお客様のシートを引き継ぐとき、最初にやるのはこの「どこまで戻せるか」の確認です。戻せる保証がないまま改修に入ると、途中で詰んだときに逃げ場がありません。
再発防止:壊される余地を物理的に減らす
原因が人の操作である以上、「気をつける」では止まりません。操作できる場所を狭めるのが唯一効く対策です。
シートと範囲の保護で、数式の列を触れなくする
いちばん効果が大きく、いちばん実施されていない設定です。データ →「シートと範囲を保護」→「シート / 範囲を追加」で対象を選び、「範囲」または「シート」を指定して「権限を設定」へ進みます。
ここで選べるのは2段階です。「この範囲を編集するときに警告を表示する」は、編集時に確認メッセージを出すだけで実際の編集はブロックしません。本気で守りたいなら「この範囲を編集できるユーザーを制限する」を選び、自分のみ/ドメインのみ/カスタム/別の範囲から権限をコピーのいずれかを指定します。
運用の落としどころとしては、計算列・集計行・マスタは「制限する」、入力列は無保護、見出し行は「警告を表示する」の3段構えが扱いやすいです。全部を制限すると今度は保護を外す作業が常に発生して、結果的に保護が解除されたまま放置されます。
入力用シートと計算用シートを分ける
設計としての本筋はこれです。人が触るシートには数式を1つも置かない。入力シートは素のテーブルにし、集計・計算は別シートで入力シートを参照して行います。こうすると、入力者がどれだけコピペやオートフィルをしても計算が壊れません。壊れるのは入力データの体裁だけで、それは見れば分かります。
この分離をするだけで、ここまで挙げた原因1〜3のうち「コピペによる数式消失」「オートフィルによる上書き」「値貼り付け」がまとめて無効化されます。既存のシートを作り替える手間はかかりますが、毎月の復旧作業と比べれば一度で済みます。複数人運用で壊れる構造そのものは複数人で使うスプレッドシートが壊れる原因と対策で、同時編集・権限事故・参照ズレの3観点から整理しています。
名前付き範囲で、参照のずれを読めるようにする
データ →「名前付き範囲」で範囲に名前を付けると、数式が =SUM(売上明細) のように読める形になります。読めるということは、おかしくなったときに気づけるということです。A1:D500 のままでは、範囲が1行足りないことに誰も気づけません。
公式ヘルプによる制約は、使える文字が文字・数字・アンダースコアのみ、長さは1〜250文字、数字や「true」「false」で始められない、スペースや句読点は不可、「A1」「R1C1」のようなセル参照記法は不可です。管理はデータ →「名前付き範囲」か、左上の範囲ボックスのプルダウンから「名前付き範囲を管理」で行います。
ひとつ注意があります。名前付き範囲を削除すると、その範囲を参照していた数式は機能しなくなります。整理のつもりで不要そうな名前を消すのは、まさに「数式が勝手に壊れた」を自分で起こす行為です。消す前に、その名前が使われていないかを検索してください。
IMPORTRANGE は「切り離す」前提で設計する
別のスプレッドシートから値を引く IMPORTRANGE(スプレッドシートのURL, 範囲の文字列) は便利ですが、依存が増えるぶん壊れ方も増えます。公式ヘルプが挙げている注意点はそのまま実務の落とし穴です。
- 初回はアクセス許可のメッセージに明示的に許可する必要がある。許可後は、読み込み先の編集権限を持つ全ユーザーがそのデータを取得できるようになる(=権限設計に影響する)
- 複数シート間の連鎖参照(チェーン)は避ける。更新が遅れ、レスポンスが落ちる
- AとBで相互に参照すると循環参照になり、データが出なくなる
- リクエストが多すぎると「Loading…」が解消しなくなるので、IMPORT 関数の数自体を減らす
- NOW() や RAND() を含むセルは参照できない
- リクエストごとに10MBの上限がある
実務上の判断としては、参照元の構造が自分たちの管理下にないなら IMPORTRANGE は使わない。他部署や他社が自由に列を足し引きするシートを引いていると、相手が1列挿入した瞬間にこちらの集計が全部ずれます。必要なら定期的に値として取り込む(コピーを置く)形にして、リンクを切ってしまうほうが安定します。
ここまでの設定は、今日の午後にでも入れられるものばかりです。ただし、どれも「人が正しく運用し続ける」ことが前提になっています。
Mihata ではスプレッドシートの運用がこの限界に当たったお客様向けに、シートの構造を保ったままアプリの形にする支援もしています。記事の途中で恐縮ですが、同じ悩みで何度も復旧作業をされている方には役に立つと思っていますので、よろしければあわせてご覧いただけたら嬉しいです。
手当てを続けても止まらないなら、構造の限界に来ている
保護範囲を設定し、入力シートを分け、名前付き範囲を整えた。それでも月に何度か数式が壊れる。この状態まで来たら、対策が足りないのではなく、スプレッドシートで解く問題ではなくなっている可能性を考えるべきです。
判断の目安を挙げます。(1)同時に編集する人が5人を超えた、(2)入力する人と集計を見る人が別の部署になった、(3)1シートの行数が数千行を超え、IMPORTRANGE で複数ファイルを束ねている、(4)復旧や点検に月1時間以上かかっている。このうち2つ以上に当てはまるなら、構造の問題です。
スプレッドシートは「全セルを誰でも自由に書き換えられる」ことを前提にした道具で、そこが強さでもあります。入力の自由度を奪っていくほど使いにくくなり、自由度を残すほど壊れます。このトレードオフは設定では解消できません。解消するには、入力を画面(フォーム)に限定し、計算と保存をその裏側に隠すしかありません。
とはいえ、業務システムを入れ替える話にするのは大げさです。Mihata がスプレッドシートをそのまま業務アプリにする「スプシ de 社内アプリ」でやっているのは、シートをデータの置き場として残したまま、人が触る部分だけを入力画面に差し替えるというやり方です。集計の数式はシート側に残るので、これまでの集計方法を捨てる必要はありません。壊れる経路だけを塞ぐ、という考え方です。
どちらを選ぶかは規模の問題です。壊れるのが年に1〜2回なら、保護範囲とシート分割で十分に足ります。本記事の対策を先に入れてみて、それでも止まらないときに構造の話を検討するのが順序として健全だと考えています。
今日やる順番(チェックリスト)
- 壊れたセルを右クリック →「編集履歴を表示」で、人の操作かどうかを切り分ける
- 空振りしたら Ctrl+Alt+Shift+H でファイル全体の変更履歴を開き、壊れた時刻を特定する
- 調査を始める前に「最新の版に名前を付ける」で現状を保存する
- 旧版を表示して Ctrl+~ で数式を読み、必要なセルだけコピーして現在の版へ戻す(全体復元は最後の手段)
- Ctrl+~ のまま、同じ列の数式の形が揃っているかを一度ざっと確認する
- データ →「シートと範囲を保護」で計算列・集計行・マスタを「編集できるユーザーを制限する」に変更する
- 共有している人全員に、絞り込みは「フィルタビューを作成」を使うことと、列の部分選択で並べ替えないことを伝える
- 固定したい参照に $ を付け直す(F4/Mac は Fn+F4)。税率などは設定シートの1セルに逃がす
- 次の改修で、入力用シートと計算用シートを分ける段取りを立てる
数式が勝手に書き換わる問題は、原因さえ切り分けられればほとんどが30分以内に収束します。厄介なのは、原因を特定せずに「とりあえず直した」を繰り返して、同じ事故が毎月起きる状態です。1回目に履歴まで遡って原因を確定させておくことが、結局いちばん短い道になります。
自社のシートがどの段階にあるのか、保護範囲の設計で足りるのか、それとも入力画面を切り出したほうが早いのか。判断に迷う段階でご相談いただければ、現状のシートを見て率直にお伝えします。無理にアプリ化をおすすめすることはありませんので、気軽に投げていただければ嬉しいです。
よくある質問
数式が消えて数字だけ残っているのは誰の操作ですか?
値貼り付けやベタ打ちでの上書きがほとんどです。該当セルを右クリックして「編集履歴を表示」を選ぶと、誰がいつ何から何へ変えたかが分かります。ただし行や列の追加・削除、セルの書式変更はセルの編集履歴には表示されないため、空振りした場合はファイル全体の変更履歴(Ctrl+Alt+Shift+H)を確認してください。
他の人のフィルタで自分の画面の行が消えるのを防げますか?
絞り込む側が「フィルタを作成」ではなく「フィルタビューを作成」を使えば防げます。Google公式ヘルプでは、通常のフィルタはアクセスできるすべてのユーザーに同じフィルタが適用され、フィルタ表示は複数のユーザーが同時に別々のものを使えると説明されています。共有シートではフィルタ表示を使うルールにしてください。
数式だけを元に戻して、他の人の新しい入力は残せますか?
できます。変更履歴で旧版を表示したまま復元はせず、壊れる前の数式が入っているセルをコピーして現在の版に貼り付けます。版の復元はファイル単位で戻るため、復元後に他の人が入力したデータも消えます。1セルだけなら、セルの編集履歴に出ている変更前の値を打ち直すのが最も速いです。
数式の列を他の人に触らせないようにできますか?
データメニューの「シートと範囲を保護」で設定できます。「この範囲を編集するときに警告を表示する」は確認メッセージが出るだけで編集自体は止まりません。確実に守るなら「この範囲を編集できるユーザーを制限する」を選び、自分のみ・ドメインのみ・カスタムなどから指定してください。
対策を入れても毎月壊れる場合はどうすればいいですか?
同時編集者が5人を超えた、入力者と閲覧者が別部署になった、IMPORTRANGEで複数ファイルを束ねている、復旧に月1時間以上かかっている——このうち2つ以上に当てはまるなら構造の限界です。入力を画面に限定し、計算と保存を裏側に隠す方向(シートをそのままアプリ化する等)を検討する段階です。