手書きの経費精算書をAIに読ませて、出てきた数字をそのまま台帳に貼る。ここで困るのは、読み間違いがあっても画面上は普通の数字に見えることだ。全部を目で照合し直すなら、最初から人が打ったほうが速い。
合計欄との差額を見るだけで、どこが違うかはかなり絞れる。8行の帳票200枚に読み違いを入れて試したら、入れた189件は全部、差額に出た。誤りのない11枚で差額が出たことは一度もなかった。
以下の計算は、2026年9月21日にMicrosoft 365のExcel(バージョン16)で行った。200枚は式を確かめるために作った架空の帳票で、読み違いも手で入れている。
読み取りの精度は、ここでは測っていない
先に断っておく。手書き風のフォントで経費精算書の画像を作り、汚れと傾きとぼかしを足して読ませたら、8行とも金額まで正しく読めた。これは本物の手書きではないので、精度の試験にはならない。実際の帳票は人によって字の癖が違い、枠からはみ出し、二重線で消して書き直してある。
だから、読み取りそのものの当たり外れは扱わない。扱うのは、外れたときにそれを拾えるかどうかのほうだ。
差額が9で割り切れたら、数字は合っている
まず合計欄を読ませて、明細の合計と引き算する。差額が0でなければ、どこかが違う。
差額の出方には規則がある。どんな数も、9で割った余りが、その数字を足したものと同じになる。10も100も1000も、9で割ると1余るからだ。
つまり桁を入れ替えても、桁が1つずれても、数字の集まりが変わらないかぎり9で割った余りは変わらない。1,230を1,320と読んでも、12,000を1,200と読んでも、差額は9で割り切れる。
逆に、1を7と読み違えたときは数字そのものが変わるので、余りが動く。差額は9で割り切れない。
これで2つに分かれる。
=IF(MOD(ABS($P3),9)=0,"数字は合って位置ちがい","1文字の読み違え")
200枚のうち、桁の入れ替えを入れたのが18枚、桁が落ちたのが15枚、桁が増えたのが8枚。この41枚は全部、差額が9で割り切れた。1文字だけ読み違えた119枚で9の倍数になったものは0枚だった。
1文字ちがいの式だけで見ると、5枚を取り違えた
差額が6,000や50のように「1桁の数字に10のn乗を掛けた形」なら、どこか1文字の読み違え。これも式になる。
=IF($R3=INT($R3),"1文字の読み違え","2か所以上")
$R3は差額を、その桁数に合わせた10のn乗で割ったもの。6,000なら1000で割って6になる。割り切れれば1文字ちがいだ。
ところが、この式だけを先に見ると取り違える。桁を入れ替えた18枚のうち5枚は、差額がたまたま1桁の数字に10のn乗を掛けた形になっていた。
見る順番を決めて直した。明細に0がある行を先に拾い、次に9の倍数を見て、最後に1文字ちがいを見る。この順にしたら、200枚とも実際に入れた誤りと一致した。
判定の式を1本にするなら、この順で入れ子にする。
=IF($P3=0,"合う",
IF(COUNTIF($B3:$M3,0)>0,"1行読み飛ばし",
IF(MOD(ABS($P3),9)=0,"数字は合って位置ちがい",
IF($R3=INT($R3),"1文字の読み違え","2か所以上"))))
1行まるごと読み飛ばされたときは、その明細が0になる。29枚で試して、29枚とも0の行が出た。飛ばされた行の金額は差額にそのまま出るので、突き合わせれば金額も分かる。
8行のうち、見るのは平均2行で済む
1文字の読み違えと分かったあと、どの行かまでは差額から絞れる。
差額が6,000で、合計欄のほうが大きいとする。明細が6,000小さく読まれているので、千の位が6下がっている。7を1、6を0と読んだ形だ。つまり千の位が0か1になっている明細だけを見ればいい。明細のほうが大きいときは逆で、もとは0か1だった数字が6か7に化けている。
手で書いた数字で取り違えやすいのは、1と7、0と6、4と9、3と5、8と3あたりだ。ずれ幅と向きが決まれば、候補の数字は2つか1つに絞れる。
=IF(AND($R3=6,$P3>0),"01",IF(AND($R3=6,$P3<0),"67",
IF(AND($R3=5,$P3>0),"34",IF(AND($R3=5,$P3<0),"89",
IF(AND($R3=2,$P3>0),"3",IF(AND($R3=2,$P3<0),"5","0123456789"))))))
この絞り込みで、8行のうち色が付くのは平均2.2行だった。1文字の読み違えを入れた119枚では、間違えた行が候補から漏れたことは一度もなかった。
配った表のサンプルで追うとこうなる。合計欄が23,190で、明細の計が29,190。差額は-6,000だから、明細のほうが6,000多く読まれている。位は1000、ずれ幅は6。千の位が6大きいので、候補の数字は6か7になる。8件のうち色が付くのは、千の位が7の7,320と、6の6,160の2つ。正解は7,320のほうで、もとは1,320だった。1を7と読んだ形だ。6,160は巻き添えだが、2つ見れば済む。
配布している表では、疑わしい明細のセルだけが赤くなる。

合計欄を読み違えたら、この検算は全部崩れる
この方法は、合計欄が正しく読めていることが前提になる。合計欄も手書きなので、そこを読み違えれば差額が出て、明細のどこかが悪いことになってしまう。
合計欄だけは人が見るか、2回読ませて突き合わせる。1枚あたり1つの数字を目で確かめるだけなので、8行を全部見るより軽い。
合計欄のない帳票では、この検算は使えない。件数や前月比のような別の手がかりが要る。PDFの表をExcelに起こすときの確かめ方では、合計のほかに桁数と行数でも見ているので、そちらを組み合わせることになる。
もうひとつ、2か所以上が違っているときは種類が決まらない。差額が9の倍数でもなく、1桁の数字に10のn乗を掛けた形でもないなら、読み直したほうが速い。200枚では0枚だったが、これは1枚に1つしか誤りを入れていないからだ。実際の読み取りで何か所出るかは確認していない。
日付は合計では見られない
金額は足せるが、日付は足せない。読み取った日付は、別の見方で確かめている。
まず、ありえない日付を弾く。9月31日や2月30日は、DATEに入れると翌月にずれる。
=IF(OR($B2<1,$B2>12,DAY(DATE($A2,$B2,$C2))<>$C2),"ありえない日付","")
2026年9月31日を入れるとDATEは2026年10月1日を返し、DAYが1になって31と合わない。2月30日、4月31日、13月も同じように出た。
そのうえで、帳票の期間に収まっているかを見る。9月分の精算書に8月や10月の日付が混ざっていれば、月を読み違えたか、そもそも別の月の領収書が紛れている。どちらなのかは式では分からないので、その行だけ人が見る。
読ませるときに決めておくこと
検算が効くように、読ませ方も決めた。
金額は数字だけで返させる。「1,320円」ではなく1320にする。カンマと円が混ざると、そのあとの計算でいちいち直すことになる。
読めない字は推測させずに空で返させる。埋めてしまうと、もっともらしい数字が入って差額も合ってしまうことがある。空なら明細に0が立って、1行読み飛ばしと同じ扱いで拾える。
明細と合計欄は別々に返させる。同じ問いの中で合計まで計算させると、明細を足した数字を合計欄として返してくることがある。それでは差額が必ず0になって、検算にならない。この挙動が毎回起きるかどうかは確認していない。念のため分けている。
行の順番は帳票のとおりに返させる。順番が入れ替わっても合計は変わらないので差額では拾えないが、あとで領収書と突き合わせるときに効いてくる。
読み取りをAIに任せるかどうかの線引きは、判定をAIに任せるかどうかを50件測って決める話と同じで、枚数で決まる。月に5枚なら手で打ったほうが速い。うちは月40枚を超えたあたりから、読ませて検算する形に切り替えた。



