• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VLOOKUP関数で検索値と一致項目を取得できません)

VLOOKUP関数で検索値と一致項目を取得できません

このQ&Aのポイント
  • VLOOKUP関数を使用して表の一致項目を取得しようとしていますが、正しく取得できません。
  • 検索値に対応する一致項目が存在しない場合、近似値を取得するため検索方法をTRUEにしています。
  • しかし、値が6の場合に正しく『CCC』を取得できず、=ROUND(SUM(A1:J1),2)でごまかしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

だいぶシビアなところを突いていますが,浮動小数点誤差によって「内部的な値」が6未満になっています。「エクセル(コンピュータ)は計算を間違えない」というのはまっかな大嘘です,という実例の一つです。 小数点以下の数字を使って計算をしているところ,どこでもこれが紛れ込む可能性があります。 >現在のところ、=ROUND(SUM(A1:J1),2)としてごまかしているのですが、 ごまかしでもなんでもなく,極めて正しい対処です。 =VLOOKUP(ROUND(k1,2),… =VLOOKUP(ROUND(SUM(A1:J1),2),… などでも構いません。 また微少数(A1:J1に出てくる値よりも十分小さい値)を使って =VLOOKUP(K1+0.0001,A2:B4,2,TRUE) 等としてもできます。

sakagamijiro
質問者

お礼

浮動小数点誤差だったのですね。大昔に勉強したことを思い出しました。 EXCELは万能とばかり思っていたので、全然結びつきませんでした。 原因不明で終わらせられない計算だったので、大変助かりました! ありがとうございます!!

その他の回答 (2)

回答No.3

小数の誤差・・・苦手だ =SUMPRODUCT(A1:J1*10)/10 といったん整数化して対処すればよいのかな

sakagamijiro
質問者

お礼

ありがとうございます! 一度整数化したほうが、ROUNDよりも無理やり感がないですね。

noname#204879
noname#204879
回答No.2

》 一致しない場合は、近似値を取得したいため、検索方法をTRUEにしています その表現は正しくありません。 「検索方法をTRUEに」すれば、「検索値が見つからない場合に、検索値未満で最も大きい値が使用されます」 セル K1 の値が 5 以上で、かつ、6 未満の場合は BBB が返ってきます。だから… セル K1 の値が 5.999999… の「近似値」は“常識的には”6 ですが、「検索方法をTRUEに」にすれば 5 をヒットしてしまいます(→ BBB が返ってきます)。 お示しの例では範囲 A1:J1 には小数があります。Excel に限らず、パソコンは小数の計算に弱いので、計算結果を比較する場合は何等かの“調味料”を振り掛ける必要な場合が多いということを知るべきです。 「=ROUND(SUM(A1:J1),2)」も立派な調味料の一つで、決して「ごまかし」ではありません。取り扱う少数の桁が多い場合は「2」をそれ以上の値(5 とか 10 とか)にしなければなりません。

sakagamijiro
質問者

お礼

ありがとうございます! 今まで全く意識したことがなかったので、勉強になりました。 小数が入る計算の場合は、注意したいと思います。

関連するQ&A