変更履歴から復元したいのに、目的の版が見つからないとき

記事
IT・テクノロジー
昨日まであった数式や行が、今開いたら消えている。ファイル > 変更履歴を見る、
から履歴を開いてみたものの、時刻の一覧はあるのに、
どの版が「消える前」の状態なのか分かりません。似たような時刻の版が
何個も並んでいて、1つずつ開いて確認するだけで時間が溶けていきます。

変更履歴が「見たい粒度」で残っていないのには理由があります。
仕組みを踏まえたうえで、目的の版を探す手順を整理します。

■ 履歴の粒度は「編集のまとまり」で決まり、セル単位ではない

スプレッドシートの変更履歴は、セル1つを変更するたびに1版増える
わけではありません。短時間に連続して行われた編集を、Googleのサーバー側が
自動的に1つの版としてまとめます。 どのくらいの間隔でまとめられるかは
公開された固定値ではなく、編集の間隔や量によって変わるため、
「10分作業したのに履歴は1版しか増えていない」という状態は普通に起こります。

このため、「目的の変更が起きた直後」を狙って履歴を選んでも、
その版の中に別の編集も一緒に含まれていることがあります。
1つの版を開いたときに、意図しない箇所まで変わって見えるのはこのためです。

■ 名前付きバージョンを付けておくと、後から探しやすくなる

ファイル > 変更履歴を見る、の画面で、時刻の右側にある三点メニューから
「このバージョンに名前を付ける」を選ぶと、その版に自由なラベルを
付けられます。「月次集計を確定した版」のような名前を、
区切りのタイミングごとに付けておくと、後から時刻だけを頼りに
探す必要がなくなります。

名前付きバージョンは既定では一覧に埋もれず表示され続けるため、
重要な作業の節目(提出前、確定前、大きな構成変更の前)に
名前を付ける運用にしておくと、次に同じ問題が起きたときの
探索コストが大きく下がります。 逆に言えば、名前を付けていない
過去の版は時刻だけが頼りで、埋もれている数十版の中から
目視で探すしかありません。

■ セル単位の履歴は、右クリックの「変更履歴を表示」から見える

ファイル全体の履歴を開かなくても、特定のセルだけの変更履歴を
確認する方法があります。対象セルを右クリックし、
「変更履歴を表示」を選ぶと、そのセルに限定して、
いつ・誰が・どんな値からどんな値に変えたかが時系列で表示されます。

「消えた行全体」ではなく「特定のセルの値がいつ変わったか」を
知りたいだけなら、全体の履歴を1版ずつ開くよりこちらの方が早いです。
ただし、この機能はセルの値の変更履歴であり、行の削除や
シートの構成変更までは追えない点に注意してください。

■ 履歴が残らない・追えないケース

変更履歴を確認しても手がかりが無い場合、そもそも履歴の対象外の
操作だった可能性があります。

・CSVやExcelファイルからのインポートで、シートの中身を丸ごと
 置き換えた場合。 インポート自体は1つの版として記録されますが、
 インポート前の状態がどんな経緯だったかまでは追えず、
 「置き換わった」という事実だけが残ります。

・Google Apps Scriptから `setValues` や `clear` などで
  書き換えた場合。 人間が手で編集したときと同様に版としては
  記録されますが、変更した本人(人間の名前ではなく、
  スクリプトの実行アカウント)が分かりにくく、
  何が起きたか読み取りづらいことがあります。

・閲覧権限・コメント権限のユーザーが行った操作。
  そもそも編集権限がない場合は変更自体が発生しないため、
  この場合は履歴の問題ではなく権限設定の確認が先になります。

■ 名前を付けていなかった場合、色付きハイライトを手がかりに絞り込む

すでに履歴が数十版たまっていて、どれが目的の版か見当もつかない場合、
時刻を1つずつ開いて目視比較するより先に試せることがあります。
変更履歴の画面を開くと、選択している版で直前の版から変わった
セルが黄色くハイライトされて表示されます。 これは、その版で
「何が変わったか」を1版ずつ見なくても把握できる仕組みで、
目的の変更に関係ありそうな列・行だけをキーワードに、
一覧を上から順に流し見していくと、総当たりで開くよりも
早く当たりを絞り込めます。

また、変更履歴の一覧は既定では時系列がまとまって表示されますが、
右上の「すべての変更履歴を表示」に切り替えると、まとめられる前の
細かい版が展開されます。1つの版の中に複数の変更が混ざっていて
判断がつかない場合、この表示切り替えで粒度を細かくできないか
確認する価値があります。

■ 古い版が一覧からいつの間にか減っていることがある

名前を付けていない版は、時間の経過や版の数が増えるにつれて、
細かい版同士がまとめられたり、一覧から間引かれたりすることがあります。
「先週は確かにあった時刻の版が、今日見たら一覧に無い」という場合、
削除された・壊れたというより、細かすぎる版が自動的に整理された
可能性を考えてください。この整理は、名前付きバージョンには適用されにくく、
名前を付けた版は基本的に一覧に残り続けます。作業の節目に名前を
付けておく運用が有効なのは、この「後から探しやすくする」目的に加えて、
「そもそも消えにくくする」意味も持っているためです。

■ 復元する前に、必ずコピーを作る

目的の版が見つかったら、その場で「このバージョンを復元」を押したく
なりますが、復元は現在のシートの状態を過去の版で上書きする操作です。
復元後に「実はもう少し新しい版の方が正しかった」と気づいても、
現在の状態(復元前の版)はそのままでは戻せません(復元という操作自体も
履歴の1版として残るため完全に失われるわけではありませんが、
探す手間がもう一段増えます)。

手順としては、まず対象の版を開いた状態で、右上の「このバージョンを復元」
ではなく、ファイル > コピーを作成、で別ファイルとして複製するか、
現在のシートをコピーしてから復元を実行する方が安全です。
複数の版を見比べたい場合も、それぞれをコピーして並べて確認した方が、
1つずつ復元と取り消しを繰り返すより早く判断できます。

■ やってはいけないこと

「消えた」と気づいた瞬間に、確認せず一番古そうな版を復元すること。
履歴の粒度がまとまっている以上、古い版には目的の変更以外の
編集も戻っていないことがあり、逆に別の必要な変更まで
失う可能性があります。まず名前付きバージョンやセル単位の履歴で
当たりを付けてから、コピーの上で復元してください。

■ それでも解決しないとき

・インポートやスクリプトによる書き換えで、目的の版がそもそも
 履歴に残っていない
・名前付きバージョンを付けておらず、数十版の中から目視で探すしかない
・共同編集者が多く、誰のどの操作で変わったのか履歴だけでは
 判断がつかない

このあたりまで来たら、履歴を1つずつ突き合わせながら
特定した方が早いです。

私はスプレッドシートの調査・復元作業を承っています。
どの版に何が起きていたかを整理してお返ししています。

――
この記事の執筆には生成AIを活用しています。内容は実際の挙動を確認して書いています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す