おはよう、後輩A君。
請求の額と入金の額をならべて、差が0ならOK、そうでなければNG。そんなチェックの表を、A君も作ったことはないかな。
先に答えを言うね。⭐ 請求と入金がぴったり同じなのに、チェックの式が NG を出したんだ。10行のうち4行で、なんだよ。差のセルは、どれも「0」と出ているのに、なんだ。
⇒ 直し方は、=IF(ROUND(C2-D2,2)=0,”OK”,”NG”) のように、差をROUND(四捨五入)してから0とくらべること。これで、10行ともOKになったよ。
11月7日に、Mac版のエクセル(16.113.2)で試したよ。表は命令(プログラム)で作って、答えを読むのも命令でしたんだ。請求や入金の数字、名前は、どれも試しに作ったものだよ。
- 1. 請求と入金の差をチェックしたら、10行のうち4行が NG だったんだよ
- 2. ⚠️ 差のセルは0なのに、かっこで包むと小さな数が出てきたんだよ
- 3. ⭐ ROUND(差,2)=0 にしたら、10行とも OK になったんだよ
- 4. 0.1を10行足した合計でも、同じことが起きたんだよ
- 5. ⚠️ 探す式でも、COUNTIF は「ある」、MATCH と VLOOKUP は #N/A だったんだよ
- 6. よく知られた 0.1+0.2 でも、たしかめてみたんだよ
- 7. ⚠️ 今日測れなかったこと
- 8. エクセルの記事、これで33本目だよ
- 結論:差のチェックは、ROUND(差,2)=0 で書こうか。0に見えても、引き算は少しずれることがあるんだよ
- よくある質問
1. 請求と入金の差をチェックしたら、10行のうち4行が NG だったんだよ
こんな表を作ったんだ。
A列 品目1
B列 品目2
C列 請求 → =A2+B2(品目1と品目2を足した数)
D列 入金 → 手で入れた数(請求と同じ数)
E列 差 → =C2-D2
F列 差=0? → =IF(C2-D2=0,”OK”,”NG”)
F列の式は、「請求から入金を引いて、0なら OK、ちがえば NG」という意味だよ。請求と入金は同じ数を入れたから、ぜんぶ OK になるはずだね。
結果は、こうだったんだ。

| 行 | 請求(品目1+品目2) | 入金 | 差の見た目 | チェック |
|---|---|---|---|---|
| 2 | 10.1+20.2 → 30.3 | 30.3 | 0 | ⚠️ NG |
| 3 | 1.1+2.2 → 3.3 | 3.3 | 0 | ⚠️ NG |
| 4 | 100.7+200.2 → 300.9 | 300.9 | 0 | OK |
| 5 | 12.3+45.6 → 57.9 | 57.9 | 0 | ⚠️ NG |
| 6 | 0.7+0.1 → 0.8 | 0.8 | 0 | ⚠️ NG |
| 7 | 3.3+3.3 → 6.6 | 6.6 | 0 | OK |
| 8 | 1234.56+789.01 → 2023.57 | 2023.57 | 0 | OK |
| 9 | 50.5+25.25 → 75.75 | 75.75 | 0 | OK |
| 10 | 19.99+5.01 → 25 | 25 | 0 | OK |
| 11 | 8.8+1.1 → 9.9 | 9.9 | 0 | OK |
⭐ 2・3・5・6行目の4行で、差は「0」と出ているのに、チェックは NG だったんだ。
⚠️ もしこれが本当の仕事の表だったら、合っている入金を「合っていない」と思って、調べ直すことになるよね。
2. ⚠️ 差のセルは0なのに、かっこで包むと小さな数が出てきたんだよ
差のセル(E列)は、中身を読んでも 0 だったよ。表示を指数(E のつく書き方)に変えても 0.00E+00、つまり 0 のままだったんだ。
そこで、同じ引き算をかっこで包んで、=(C2-D2) と書いてみたんだ。あわせて、請求と入金を=C2=D2(同じなら TRUE)でもくらべたよ。

2行目 =(C2-D2) → -3.6E-15 / =C2=D2 → TRUE
3行目 =(C2-D2) → 4.44E-16 / =C2=D2 → TRUE
5行目 =(C2-D2) → 7.11E-15 / =C2=D2 → TRUE
6行目 =(C2-D2) → -1.1E-16 / =C2=D2 → TRUE
ほかの6行 =(C2-D2) → 0 / =C2=D2 → TRUE
かっこで包むと小さな数が出たのは、IF で NG になった4行とまったく同じだったよ。
-3.6E-15 は、「-3.6 に、0.1 を15回かけた数」という意味だよ。小数で書くと、-0.0000000000000036。小数点の下に0が14個ならんだあとに、やっと 36 が来るくらい小さいずれなんだ(E-15 は小数点の下15けた目、という読み方から数えたよ)。
ずれる理由は、1つだけ覚えておけばいいよ。⇒ 小数は、エクセルの中で、ほんの少しずれて持たれることがあるんだ。そのずれが、IF の中の引き算には出てきた、ということなんだよね。
⭐ もう1つ。=C2=D2 は、10行とも TRUE(同じ) だったんだ。同じ「請求と入金」でも、=でくらべると同じ、IF の中で引き算すると NG。今日の表では、式の書き方で答えが分かれたんだよ。
3. ⭐ ROUND(差,2)=0 にしたら、10行とも OK になったんだよ
チェックの式を、こう変えたんだ。
前 =IF(C2-D2=0,”OK”,”NG”)
後 =IF(ROUND(C2-D2,2)=0,”OK”,”NG”)
ROUND(C2-D2,2) は、「差を小数2けたに四捨五入する」という意味だよ。小さなずれを丸めてから、0とくらべるんだ。
⚠️ ただ、丸めたせいで本当のずれまで見逃したら困るよね。だから13行目に、入金を 30.29 にした行も作ったんだ。請求は 30.3 だから、本当に 0.01 ちがう行だよ(30.3−30.29=0.01)。

2〜11行目(請求と入金が同じ) → ROUND で10行とも OK
13行目(本当に 0.01 ちがう) → ROUND でもちゃんと NG
⭐ 合っている行は OK にもどって、本当にちがう行は NG のまま。これなら、チェックの役目を果たしてくれるよね。
ほかにも、通った直し方が1つあったよ。
差の列(E列 =C2-D2)を別に作って、その列を =IF(E2=0,”OK”,”NG”) で見る
→ 2〜11行目は10行とも OK、13行目は NG
差のセルの中身は 0 だったから、そのセルを見れば OK になったんだ。でも、A君がまず覚えるのは、ROUND(差,2)=0 のほうでいいと思うよ。差の列がない表でも、チェックの式1つで書けるからね。
4. 0.1を10行足した合計でも、同じことが起きたんだよ
別のシートで、0.1を10行ならべて、=SUM(A2:A11) で合計したんだ。入金は 1 にしたよ。0.1を10個足せば 1 だから、合っているはずだね。
=SUM(A2:A11) → 見た目は 1
差 =C2-D2 → 0
=IF(C2-D2=0,”OK”,”NG”) → ⚠️ NG
=C2=D2 → TRUE
=(C2-D2) → -1.1E-16
ROUND にしたチェック → OK
合計の式の中で、そのまま引き算しても同じだったよ。
=SUM(A2:A11)-D2 → 0
=IF(SUM(A2:A11)-D2=0,”OK”,”NG”) → ⚠️ NG
=SUM(A2:A11)=1 → TRUE
⇒ 足して出した数を、IF の中で引き算して0とくらべると、ずれが出ることがある。足し算の式でも、SUM でも、同じだったんだよ。
5. ⚠️ 探す式でも、COUNTIF は「ある」、MATCH と VLOOKUP は #N/A だったんだよ
計算で出した請求の列(=A2+B2 で作った列)から、30.3 や 3.3 を探す式も試したんだ。探す値は、手で入れた数だよ。
COUNTIF → 請求の列に、探す値が何件あるか
MATCH → =MATCH(F4,$C$2:$C$11,0) の形で、何番目にあるか(最後の0は、ぴったり同じものを探す)
VLOOKUP → FALSE(ぴったり同じものを探す)をつけて、となりの名前を引く

| 探す値 | COUNTIF | MATCH | VLOOKUP |
|---|---|---|---|
| 30.3 | 1 | ⚠️ #N/A | ⚠️ #N/A |
| 3.3 | 1 | ⚠️ #N/A | ⚠️ #N/A |
| 300.9 | 1 | 3 | 上野 |
| 57.9 | 1 | ⚠️ #N/A | ⚠️ #N/A |
| 0.8 | 1 | ⚠️ #N/A | ⚠️ #N/A |
| 6.6 | 1 | 6 | 加藤 |
⭐ COUNTIF は「1件ある」と言っているのに、MATCH と VLOOKUP は見つからない(#N/A)。#N/A になったのは、30.3・3.3・57.9・0.8 で、1章で NG になった4行と同じ数だったんだ。
ここで通った直し方は、探される側の列を丸めておくことだよ。
請求の列の横に =ROUND(C2,2) の列を作って、そこから MATCH で探す
→ 6つとも見つかった(1・2・3・4・5・6番目)
「入っているのに #N/A」になる原因は、ほかにもあるよ。VLOOKUP で #N/A が出る記事や、見えない空白で一致しない記事もあわせて見てみようか。
6. よく知られた 0.1+0.2 でも、たしかめてみたんだよ
小数のずれの話でよく出てくる 0.1+0.2 と、1.1−1 も試したよ。
=0.1+0.2 → 0.3
=0.1+0.2-0.3 → 0(指数表示でも 0.00E+00)
=(0.1+0.2-0.3) → 5.55E-17
=0.1+0.2=0.3 → TRUE
=IF(0.1+0.2-0.3=0,”OK”,”NG”) → ⚠️ NG
=ROUND(0.1+0.2,10)=0.3 → TRUE
=1.1-1 → 0.1
=1.1-1-0.1 → 0
=(1.1-1-0.1) → 8.33E-17
=1.1-1=0.1 → TRUE
⇒ 請求と入金の表と同じ形だったよ。セルの答えは 0 に見えるのに、かっこで包むと小さな数が出て、IF の中の引き算は NG。=でくらべると TRUE だったんだ。
7. ⚠️ 今日測れなかったこと
・測ったのはMac版のエクセル(16.113.2)だよ。Windows版で同じになるかは、分からないんだ
・「表示桁数で計算する」という設定は、ブックの中の数を書きかえてしまうので、触っていないよ
・条件付き書式やフィルターで、どう見えるかは試していないんだ
・税込みの計算で1円ずれる話は、今日は試していないよ
・なぜ差のセルだけ 0 になるのかの仕組みは、エクセルの公式の説明を読んでいないから、分からないんだ
・=でくらべると今日の10行は TRUE だったけれど、全部の数で確かめたわけではないよ
・小数18けたで表示しようとした列は、列の幅が足りなくて ######## になってしまって、測りそこねたんだ
・表も式も、命令(プログラム)で作って読んだよ。手で入れたときは試していないんだ。数字と名前は、試しに作ったものだよ
8. エクセルの記事、これで33本目だよ
30本目は、人日の合計と人月が合わない話だったね。あれは、計算は合っていて、丸める場所がちがうだけだったんだ。
今日は、見た目では同じ数や0なのに、IFの中の引き算や、MATCHで探すときにずれた話なんだ。どちらも、くらべる前にROUNDしておいたら合ったんだよね。
結論:差のチェックは、ROUND(差,2)=0 で書こうか。0に見えても、引き算は少しずれることがあるんだよ
今日試した結果をまとめるとこうだよ。
① 請求と入金が同じなのに、=IF(C2-D2=0,”OK”,”NG”) は10行のうち4行で NG
② 差のセルは 0。でも =(C2-D2) とかっこで包むと -3.6E-15 などの小さな数が出た
③ =C2=D2 と COUNTIF は「同じ」「ある」とみなした。MATCH と VLOOKUP(ぴったり探す)は #N/A
④ ROUND(C2-D2,2)=0 にしたら10行とも OK。本当に 0.01 ちがう行は NG のまま
⑤ 差の列を作ってその列を見る、探される側の列を ROUND しておく、でも通った
チェックの式がまちがって NG を出すと、合っているものを疑って時間を使ってしまう。小数の引き算は、くらべる前に丸めておこうか。
よくある質問
Q1. =C2=D2 でくらべれば、ROUND はいらないですか
今日の10行では、=C2=D2 はぜんぶ TRUE だったよ。0.1+0.2=0.3 も TRUE だったんだ。⚠️ でも、全部の数で確かめたわけではないんだよね。だから「=でくらべれば必ず大丈夫」とは言えないよ。⇒ 今日の表では、ROUND(差,2)=0 にすると、合っている行は OK、本当に 0.01 ちがう行だけ NG になったよ。差のチェックは、こちらで書いておこうか。
Q2. 表示形式を変えれば、ずれに気づけますか
指数の表示では、気づけなかったよ。差のセルは、表示を指数に変えても 0.00E+00 のままだったんだ。小数18けたで表示しようとした列は、列の幅が足りなくて ######## になってしまったから、そちらで気づけるかは分からないんだ。⇒ 今日ずれが見えたのは、=(C2-D2) とかっこで包んだ式のほうだったんだよ。
Q3. Windows版のエクセルでも、同じですか
⚠️ Windows版は試していないから、分からないんだ。今日測ったのは、Mac版のエクセル(16.113.2)だけだよ。ROUND にしたら合っている行は OK、本当に 0.01 ちがう行は NG になった、というのも、Mac版で確かめた結果なんだ。
【本日のミッション:差のチェックを、ROUND してからくらべてみようか】
- ☐ 自分の表で、=IF(C2-D2=0,…) のように、IF の中で引き算して0とくらべている式がないか探してみようか
- ☐ 見つけたら、=IF(ROUND(C2-D2,2)=0,”OK”,”NG”) に書きかえて、NG の数が変わるか見てみようか
- ☐ 計算で出した列を MATCH や VLOOKUP で探して #N/A が出たら、=ROUND(C2,2) の列を作って、そこから探してみようか
- ☐ (後輩A君へ)NG が出ても、まちがいとはかぎらないんだよ。差を丸めてから、もう一度くらべてみようか
📚 AI活用シリーズ(おすすめ)

コメント