経費精算を200件並べて目で追うと、どれも同じに見えてくる。10件目で集中が切れる。
見る件数を減らすほうが早い。4つの式で印をつけたら、208件のうち18件だけが残った。金額でいえば、その18件が全体の9%にあたる。
以下の式と件数は、2026年9月21日にMicrosoft 365のExcel(バージョン16)で計算した。208件のデータは式を確かめるために作った架空のもので、割合そのものに意味はない。税務上の判断は扱っていない。
目で追うと、異常が背景に沈む
同じ形の行が200続くと、違いが見えなくなる。金額が少し大きいだけの行は、並んでいる中では目立たない。
人が気づくのは、極端に大きい金額と、見慣れない区分くらいだ。二重に出された同じ金額の行や、締め日の外にある日付は、単独で見れば普通の行に見える。
機械は逆で、文脈を見ない代わりに条件で拾う。同じ組み合わせが2回出ているか、範囲の外かどうかは確実に出る。人が見る前に、機械で件数を減らす。
4つの式で印をつける
列は、申請者、日付、区分、金額、領収書番号。この5つがあれば4種類の検査ができる。
重複の判定は、申請者と日付と金額の3つが同じ行が2回以上あるかを見る。
=IF(COUNTIFS($申請者,B2,$日付,C2,$金額,E2)>1,"重複","")
期間外は、締めの範囲と比べるだけだ。
=IF(OR(C2<DATE(2026,8,1),C2>DATE(2026,8,31)),"期間外","")
上限超えは、区分ごとの上限表を別に持ってVLOOKUPで引く。
=IF(E2>VLOOKUP(D2,$上限表,2,FALSE),"上限超","")
領収書番号の重複はCOUNTIF1本で出る。
=IF(COUNTIF($領収書番号,F2)>1,"領収書重複","")
208件にかけた結果、重複が12件、期間外が2件、上限超えが2件、領収書番号の重複が2件出た。どれか1つでも印がついた行は18件だった。全体の8.7%になる。
同じ人・同じ日・同じ金額だけでは、偶然も拾う
ここで気づいたことがある。仕込んだ二重申請は3組6件だけなのに、重複の印は12件ついた。
残りの6件は偶然だった。申請者が6人しかおらず、交通費の金額も限られた種類しか出ないので、同じ人が同じ日に同じ額の交通費を2回出すことが起きる。往復で同じ路線を使えば、実際にそうなる。
つまり、この3条件だけでは二重申請と正常な申請を区別できない。区別するには領収書番号を見る。番号が違えば別の支払いで、同じなら二重だ。
だから重複の印は、判定ではなく合図として使う。印がついた行は、領収書の現物を見る。
領収書番号まで同じなら、同じ領収書を2回出したことになる。この場合は番号の列で拾える。ただ、同じ支払いでカードのレシートと店の領収書を別々にもらって出すと、番号は違う。今回の208件でも、重複の印がついた12件と領収書番号の重複の2件は1行も重なっていなかった。
つまり、番号の列だけでは二重申請の一部しか拾えない。金額と日付の重複で広く印をつけて、現物で確かめる。この2段構えになる。
差し戻しの文を式で作る
印がついた行から、本人に返す文面を作る。手で書くと18件分の入力になる。
=_xlfn.TEXTJOIN("、",TRUE,L2,M2,N2,O2)
TEXTJOINは、空のセルを飛ばして残りをつなぐ。印が2つついている行なら「重複、上限超」のようにまとまる。第2引数のTRUEが空セルを無視する指定だ。
これを日付と金額と組み合わせて1文にする。
=IF(T2="","",TEXT(C2,"m月d日")&"の"&D2&"("&TEXT(E2,"#,##0")&"円)は"&T2&"のため確認をお願いします")
TEXTで日付と金額の見た目を整える。出てきた文をコピーしてメールに貼れば、そのまま送れる。
208件で試したら、文がついた行は18件だった。印の数と一致する。件数が合っているかは毎回確かめる。合わないときは、印の列に見えない空白が入っている。
依頼のしかたと確認の型そのものは問い合わせメールの返信の記事に書いた。差し戻しも、何を確認してほしいかを具体的に書くほど戻りが早い。
端数の出方は区分で違う
金額の形からも手がかりが出る。実際の支払いには端数が出るからだ。
208件で、1,000円で割り切れる金額の割合を区分ごとに出した。交通費は0.0%で、接待交際費は69.7%だった。
=ROUND(SUMIFS($端数なしの列,$区分,"交通費")/COUNTIF($区分,"交通費")*100,1)
端数なしの列は=IF(MOD(E2,1000)=0,1,0)で作る。
交通費は運賃なので、180円や1,240円のような端数が必ず出る。ここで1,000円や3,000円が続いたら、実費ではなく概算で出している。接待交際費はコース料金や1人あたりの単価で決まることが多いので、割り切れる金額が多くても不自然ではない。
区分ごとに割合を出して、前の月と比べる。急に変わった区分があれば、そこだけ中身を見る。
18件で、金額の9%を押さえた
印がついた18件の金額を合計すると230,240円だった。全体の2,551,880円に対して9.0%になる。
=SUMPRODUCT(((L2:L209<>"")+(M2:M209<>"")+(N2:N209<>"")+(O2:O209<>""))>0)*E2:E209)
件数で8.7%、金額で9.0%。残りの190件は、4つの条件のどれにも当たらない。
この190件を見ないと決めるのが、この方法の要点になる。全部見る前提を崩さないと、件数を減らす意味がない。抜き取りで何件か見るなら、金額の大きい順に10件と決めておく。
印がついた18件のうち、本当に問題があるのは数件だ。それでも、208件を追うより18件を追うほうが速い。
上限の表は別シートに持つ
VLOOKUPが引く上限の表は、精算の表と同じシートに置かない。別シートにして、変えたときの履歴が分かるようにする。
区分と上限の2列でいい。交通費20,000円、会議費10,000円、消耗品費30,000円、接待交際費50,000円、出張旅費80,000円という形だ。
VLOOKUPの4つ目の引数にFALSEを必ず入れる。省略すると近い値で探してしまい、区分の並び順によっては違う上限を引く。ここは毎回書く。
区分の名前は入力規則のリストから選ばせる。手で打たせると表記がぶれて、VLOOKUPが#N/Aを返す。表記のぶれで照合が効かなくなる話は在庫のSUMIFSの記事に書いた。
踏んだ失敗
重複の判定だけを見て、本人に確認したことがある。往復の交通費を2行に分けて出していただけだった。領収書番号の列を持っていなかったので区別できず、疑うような聞き方になってしまった。
締めの範囲を式に直接書き込んでいたこともある。毎月DATEの中の数字を書き換えることになり、1か月分ずれたまま3か月気づかなかった。今は締め日をセルに置いて、式から参照している。
上限の表を精算の表の右に置いていた年もある。行を並べ替えたときに表まで動いて、VLOOKUPの範囲がずれた。別シートに移した。
印がついた行を全部差し戻していたこともある。期間外の2件は、月をまたいだだけで内容に問題がなかった。印は見る対象を絞るためのもので、差し戻しの判断ではない。データの保存そのものの要件は電子取引データの記事に分けて書いた。
確認していないこと
税務上どこまでが経費として認められるかは扱っていない。上の検査は、社内の規程に照らして形が合っているかを見るだけだ。
領収書そのものの真正性も確認できない。番号の重複は拾えるが、同じ店で別々に発行された領収書を突き合わせることはできない。
区分ごとの上限は、上の例では仮の金額を置いている。自分の職場の規程の金額に置き換えてほしい。
端数の割合は、業種と区分で大きく変わる。0.0%と69.7%という数字は、この架空のデータでの値だ。自分の職場で3か月分を出して、そこからの変化を見るという使い方になる。月次の作業として持たせる形は月次の締めの記事と同じで、第何営業日に見るかを決めておく。



