手書きをAIに読ませたあとの検算。200枚の読み違いを差額だけで拾った

2026-09-21AIの使い方
読み取りの検算表(Excel)をダウンロード

無料・登録不要 / 48KB / 版 1.0 / Excel 2010以降

手書きの経費精算書をAIに読ませて、出てきた数字をそのまま台帳に貼る。ここで困るのは、読み間違いがあっても画面上は普通の数字に見えることだ。全部を目で照合し直すなら、最初から人が打ったほうが速い。

合計欄との差額を見るだけで、どこが違うかはかなり絞れる。8行の帳票200枚に読み違いを入れて試したら、入れた189件は全部、差額に出た。誤りのない11枚で差額が出たことは一度もなかった。

合計欄から明細の計を引いて、差額が0なら数字はそろっている。明細に0があれば1行読み飛ばし、9で割り切れれば位置ちがい、それ以外なら1文字の読み違え

以下の計算は、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枚だった。

差額の出方で分かれた189枚。1文字の読み違えが119枚、数字は合って位置ちがいが41枚、1行の読み飛ばしが29枚

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つ見れば済む。

配布している表では、疑わしい明細のセルだけが赤くなる。

読み取りの検算表。1行読み飛ばしの0が青、1文字の読み違えで疑わしい明細が赤くなっている

合計欄を読み違えたら、この検算は全部崩れる

この方法は、合計欄が正しく読めていることが前提になる。合計欄も手書きなので、そこを読み違えれば差額が出て、明細のどこかが悪いことになってしまう。

合計欄だけは人が見るか、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枚を超えたあたりから、読ませて検算する形に切り替えた。

動作確認: Microsoft 365のExcel(バージョン16) / Windows 11 / 2026-09-21確認

手書きAIOCR検算Excel