このツールについて
同じ報告書の「最終版」と「本当の最終版」、同じ台帳を2回書き出したもの、同僚から戻ってきたシート——知りたいのは「結局どこが変わったのか」です。.xlsx か .xlsm を2つドロップすると、ページの中で開いて比較します。シートは名前で対応付け(名前が合わなければ順番で対応付け、手動で付け替えも可能)、非表示シートも隠しシートも対象です。結果は左右に並べたグリッドに差分を色と記号で表示し、シートごとに「同じセル/違うセル/追加行/削除行/数式の変更数」を集計。差分だけを表示する絞り込みと、前後の差分へのジャンプも付いています。差分一覧は CSV(sheet, cell, kind, a_value, b_value, a_formula, b_formula)で保存するか、JSON としてコピーできます。
どちらのファイルもブラウザから出ません。台帳、給与表、価格表は、見知らぬサーバーに置きたくないものの代表格です。だから2つのブックはディスクから読み込み、あなたのマシン上の Web Worker の中で展開して比較します。アップロード先はそもそも存在せず、ページが送るのは「比較を実行した・成功したか・どの対応付けモードだったか」だけ。ファイル名もシート名もセルの値も含まれません。
値・数式・型を別々に表示
対応付いたセルは3つの観点で比べ、それぞれ別の記号を付けます。値はファイルに保存されたキャッシュ値(共有文字列は解決済み)。数式は <f> のテキストで、共有数式は展開してからセルごとの実際の数式を比べます。型は数値・文字列・ブール・エラーの4種類で、文字列の 100 と数値の 100 は「一致」ではなく「型の変更」です。いちばん見逃したくないのは「値は同じなのに数式が消えた、または変わった」セル。数式の上に結果の数字を貼り付けたときの典型的な痕跡で、今日は同じに見えても明日から更新されなくなります。グリッドではこれを「数式のみ変更」として独立した記号で示すので、何千もの同一セルの中に埋もれません。数値は数値として比較(1.0 と 1 は同じ)、表示テキストで比較する切り替えと、初期値 0 の許容誤差も用意しています。日付は内部的には「日付書式の付いた数値」なので、シリアル値で比較して日付として表示します。ただの数値から日付書式に変わったセルは、値の変更ではなく表示形式の変更として報告されます。
行の対応付けは3通り
1行挿入しただけで、それ以降の行が全部「違う」と報告される——表計算の比較ツールがいちばん嫌われる場面です。そこで対応付けのモードは自分で選ぶ形にし、結果の先頭に今どのモードかを必ず表示します。キー列(推奨)は、注文番号や ID、SKU などあなたが選んだ1列以上をキーにして行を対応付け、結果を「両方にあるが内容が違う」「A にだけある」「B にだけある」「キーが重複」の4つに分けます。自動は各行をハッシュにして行の並びに Myers 差分をかけ、挿入・削除された行を見つけてから、対応した行どうしをセル単位で比べます。位置は N 行目と N 行目をそのまま比べる方式で、レイアウトが固定された帳票向きです。列は見出し行(最初の空でない行、または指定した行)のテキストで対応付け、見出しが合わない列は位置で対応付けます。自動対応付けは推測です。ほとんどの行が変わっているシートでは組み合わせを間違えることがあり、15 秒の時間予算と差分数の上限を超えると、黙って位置対応付けに切り替えるのではなく、処理を止めてキー列か位置モードへの切り替えを提案します。
比べるもの、比べないもの
比較に使うのはファイルに保存されたキャッシュ値で、再計算はしません。手動計算で保存されたブック、「開くときに再計算」のフラグが立ったブック、キャッシュ値を持たない数式セルがあるブックは古い数値を抱えている可能性があり、検出したときはページに警告を出します。数値は有効数字 15 桁まで一致すれば同じとみなします。Excel 自身が保持するのも 15 桁で、ソフトによって同じ値を 15 桁で書くか 17 桁で書くかが違うため、末尾の桁は変更ではなくノイズだからです。フォント、色、罫線、条件付き書式、データの入力規則、グラフ、ピボットテーブル、マクロ、コメントは比較しません。書式のうち報告するのは「表示形式の違い」と「結合セル範囲の違い」の2つだけです。暗号化されたブックと旧形式の .xls は、理由を示したうえで受け付けません。