概要
「どのセルで、どんなエラーが起きたか」を“ログ”として残したいとき、
エラーをそのまま #N/A や #VALUE! で見せるのではなく、
- 「B2: 仕入単価が未入力」
- 「行5: 商品コード不正(#N/A)」
のような 説明付きの文字列 に変換できると便利です。
Excel では、
数値や日付を文字列に整形する TEXT 関数 と、
エラーを拾って置き換える IFERROR / IF を組み合わせることで、
「エラーをログ用メッセージに変換する」しくみを作れます。
ここでは、初心者向けに“型”を中心に解説します。
基本発想:エラーを捕まえてメッセージに変える
IFERROR で「エラーかどうか」を判定する
エラーをログ用文字列に変えたいときの基本構造は、次の形です。
=IFERROR(計算式, "ログ用メッセージ")
動きはこうです。
計算式が正常に終わる
→ その結果を返す
計算式がエラーになる
→ “ログ用メッセージ” を返す(ここが“ログ化”)
「ログ用メッセージ」の中に、
セル番地やエラー内容の説明を文字列として書いておくイメージです。
TEXT 関数の役割
数値や日付を“文字として”ログに埋め込む
TEXT 関数は、
=TEXT(値, "表示形式")
で、
- 1234 → “1,234”
- 日付 → “2025-12-22” など
のように、「見せたい形の文字列」に整形してくれます。
ログ用文字列を作るときは、
- 正常な値 → TEXT で整形してログに書く
- エラー → IFERROR で別のメッセージを書く
という使い分けをします。
例:売上金額を「¥12,345」のようにしてログに出したい
="売上金額: " & TEXT(A2, "¥#,##0")
これを IFERROR と組み合わせると、
「エラー時は“売上計算エラー”と記録」
のようなログが作れます。
パターン1:計算式がエラーなら、説明付きメッセージに変える
割り算エラー(分母 0 など)をログ化
例:C2÷D2 を計算し、エラーならログ文字列を返す。
=IFERROR(
C2/D2,
"行" & ROW() & ": 割り算エラー(分母が0または不正)"
)
正常なとき
→ C2/D2 の結果をそのまま返す
エラーのとき
→ 例)”行5: 割り算エラー(分母が0または不正)”
といったログ用文字列になります。
パターン2:VLOOKUP エラーをログ化(コード不正の記録)
#N/A を「コード不正」として残す
例:A2 の商品コードをマスタから引く VLOOKUP
=IFERROR(
VLOOKUP(A2, マスタ!$A:$C, 2, FALSE),
"行" & ROW() & ": 商品コード不正(" & A2 & ")"
)
検索成功
→ 商品名を返す
検索失敗(#N/A など)
→ “行5: 商品コード不正(ABC999)” のようなログ文字列
この「コード不正ログの列」をあとで FILTER や COUNTIF すれば、
どのコードがどれだけ間違えられているか集計もできます。
パターン3:正常値をTEXTで整形し、エラー時は別メッセージ
ログ用に“きれいな書式+エラー文言”を混在させる
例:売上金額のログを作る。
正常なら「売上: ¥xx,xxx」を、
エラーなら「行x: 売上計算エラー」を出したい。
=IFERROR(
"売上: " & TEXT(A2*B2, "¥#,##0"),
"行" & ROW() & ": 売上計算エラー"
)
A2×B2 が正常
→ “売上: ¥12,300” のような文字列
A2×B2 がエラー
→ “行5: 売上計算エラー”
このように、
「正常・異常どちらでも “ログとして読める文字列”」になるのがポイントです。
パターン4:日時付きログを作る(タイムスタンプ)
いつエラーが出たかもセットで残す
ワークシート関数だけで簡易ログを作るなら、
NOW() や TODAY() などを TEXT で文字にして埋め込めます。
例:エラーのときだけ「日付+メッセージ」で記録する
=IFERROR(
A2*B2,
TEXT(TODAY(), "yyyy-mm-dd") & " 行" & ROW() & ": 売上計算エラー"
)
2025-12-22 行5: 売上計算エラー
のようなログが残せます。
(注意:TODAY() や NOW() は日付が更新されるので、
本格的な変更履歴には向きません。あくまで“簡易ログ”イメージです。)
パターン5:エラーの種類別にログメッセージを変える
IFERROR ではなく IF+ISNA / ISERR を使う応用
「#N/A のときはコード不正」「それ以外のエラーは計算ミス」など、
エラーの種類でメッセージを変えたい場合は、IFERROR ではなく条件分岐をします。
例:VLOOKUP の結果によってログを変える
=IF(
ISNA(VLOOKUP(A2, マスタ!$A:$C, 2, FALSE)),
"行" & ROW() & ": 商品コード未登録(" & A2 & ")",
VLOOKUP(A2, マスタ!$A:$C, 2, FALSE)
)
必要に応じて TEXT で値を整形してログに埋め込むイメージです。
例題
問題1
C2÷D2 を計算し、エラーになった場合は
「行x: 割り算エラー」というログ文字列を返したいです。
x には行番号(ROW())を使います。
このときの式を書いてください。
=IFERROR(C2/D2, "行" & ROW() & ": 割り算エラー")
問題2
A2 の商品コードをマスタ!A:C から VLOOKUP で検索し、
見つからない場合は
「行x: 商品コード不正(コード)」
というログ文字列を返したいです。
x は ROW()、コードは A2 を使って式を書いてください。
=IFERROR(
VLOOKUP(A2, マスタ!$A:$C, 2, FALSE),
"行" & ROW() & ": 商品コード不正(" & A2 & ")"
)
問題3
A2×B2 で売上を計算し、
正常なら「売上: ¥xx,xxx」という文字列を、
エラーなら「行x: 売上計算エラー」という文字列を返したいです。
TEXT 関数を使って式を書いてください。
=IFERROR(
"売上: " & TEXT(A2*B2, "¥#,##0"),
"行" & ROW() & ": 売上計算エラー"
)
問題4
A2×B2 がエラーになったときだけ、
「yyyy-mm-dd 行x: 売上計算エラー」というログ文字列を返したいです。
日付は TODAY() を TEXT で文字列にして使います。
式を書いてください。
=IFERROR(
A2*B2,
TEXT(TODAY(), "yyyy-mm-dd") & " 行" & ROW() & ": 売上計算エラー"
)
問題5
A2 の値を「#,##0.0」形式で文字列にし、
それを「値=xxxx.x」というログ文字列にしたいです。
TEXT を使った式を書いてください。
="値=" & TEXT(A2, "#,##0.0")
まとめ
「エラーをログ用文字列に → TEXT」の本質は、
- IFERROR や IF で「エラーが出たかどうか」を判定する
- エラー時には「日本語+セル番地+値」などの説明付き文字列を返す
- 正常値は TEXT で整形して、そのままログとして読める形にする
という 2 段構えです。
型としては、次のようなパターンを持っておくと応用しやすくなります。
=IFERROR(計算式, "行" & ROW() & ": エラー説明(" & 追加情報 & ")")
エラーをただ隠すのではなく、
「どこで何が起きたか」をテキストとして残せるようになると、
トラブルシュートも品質管理も、一気にやりやすくなります。
