概要
「この行、どこが間違っているのか分かりづらい…」
「計算前に“検証メッセージ”を出して、原因を明確にしたい」
「複雑なチェックを一つの式にまとめたい」
そんなときに最強なのが LET 関数を使った“検証用メッセージ出力” です。
LET を使うと、
- チェック項目に名前をつけて整理
- どの条件に引っかかったかをメッセージ化
- 最後に“正常 or 異常”を分かりやすく返す
という 読みやすくて修正しやすい検証ロジック が作れます。
LET の基本
LET の書式
=LET(
名前1, 値1,
名前2, 値2,
…,
最終的に返す式
)
LET のメリットは、
- 途中計算に名前をつけて整理できる
- 同じ計算を何度も書かなくてよい
- 検証ロジックを“見える化”できる
という点です。
検証メッセージ出力では、
「チェック結果を名前として保持 → 最後にメッセージ化」
という流れで使います。
パターン1:入力チェックのメッセージをまとめる
数量(A2)と単価(B2)の検証メッセージを出す
=LET(
qty, A2,
price, B2,
msg_qty, IF(qty="", "数量が未入力です。", ""),
msg_price, IF(price="", "単価が未入力です。", ""),
msg_qty & msg_price
)
動き:
- A2 が空白 → 「数量が未入力です。」
- B2 が空白 → 「単価が未入力です。」
- 両方空白 → 2つのメッセージが連結
- どちらも正常 → 空文字(=問題なし)
複数のチェックを“名前付き”で整理できるので、
IF の入れ子より圧倒的に読みやすくなります。
パターン2:異常値チェックをまとめてメッセージ化
0〜100 の範囲外なら異常メッセージを返す
=LET(
v, A2,
msg_low, IF(v<0, "値が0未満です。", ""),
msg_high, IF(v>100, "値が100を超えています。", ""),
msg_low & msg_high
)
異常が複数あれば複数メッセージが返り、
正常なら空文字になります。
パターン3:計算前チェック+正常時の計算を一つにまとめる
入力チェック → 問題なければ売上計算
=LET(
qty, A2,
price, B2,
msg, IF(qty="", "数量未入力。", "") &
IF(price="", "単価未入力。", ""),
IF(msg<>"", msg, qty*price)
)
動き:
- どこかが未入力 → メッセージを返す
- 問題なし → qty*price を返す
「検証 → 計算」の流れが一つの式にまとまります。
パターン4:複数の検証結果を“改行付き”で返す
メッセージを見やすく整形する
=LET(
qty, A2,
price, B2,
msg1, IF(qty="", "数量が未入力です。", ""),
msg2, IF(price="", "単価が未入力です。", ""),
TEXTJOIN(CHAR(10), TRUE, msg1, msg2)
)
CHAR(10) は改行コード。
複数のメッセージを縦に並べて返せます。
パターン5:検証メッセージとログ用情報を組み合わせる
行番号や日付を含めた“検証ログ”を作る
=LET(
v, A2,
msg, IF(v="", "未入力", IF(v<0, "負の値", "")),
IF(msg="", "OK", "行" & ROW() & ": " & msg)
)
正常なら「OK」
異常なら「行5: 未入力」などのログ形式で返します。
例題
問題1
A2(数量)と B2(単価)をチェックし、
数量が空白なら「数量未入力」、
単価が空白なら「単価未入力」、
両方正常なら空文字を返す LET 式を書いてください。
=LET(
qty, A2,
price, B2,
msg_qty, IF(qty="", "数量未入力", ""),
msg_price, IF(price="", "単価未入力", ""),
msg_qty & msg_price
)
問題2
A2 の値が 0 未満なら「負の値」、
100 を超えるなら「上限超過」、
正常なら空文字を返す LET 式を書いてください。
=LET(
v, A2,
msg_low, IF(v<0, "負の値", ""),
msg_high, IF(v>100, "上限超過", ""),
msg_low & msg_high
)
問題3
A2(数量)と B2(単価)をチェックし、
どちらかが未入力ならメッセージを返し、
両方正常なら A2×B2 を返す LET 式を書いてください。
=LET(
qty, A2,
price, B2,
msg, IF(qty="", "数量未入力", "") &
IF(price="", "単価未入力", ""),
IF(msg<>"", msg, qty*price)
)
問題4
A2 と B2 のチェックメッセージを
改行付きで返す LET+TEXTJOIN の式を書いてください。
=LET(
qty, A2,
price, B2,
msg1, IF(qty="", "数量未入力", ""),
msg2, IF(price="", "単価未入力", ""),
TEXTJOIN(CHAR(10), TRUE, msg1, msg2)
)
問題5
A2 の値を検証し、
未入力なら「行x: 未入力」、
負の値なら「行x: 負の値」、
正常なら「OK」を返す LET 式を書いてください。
=LET(
v, A2,
msg, IF(v="", "未入力", IF(v<0, "負の値", "")),
IF(msg="", "OK", "行" & ROW() & ": " & msg)
)
まとめ
「検証用メッセージ出力 → LET」のポイントは次の通りです。
- チェック項目に名前をつけて整理できる
- 複数の検証結果をまとめてメッセージ化できる
- 正常時と異常時の処理を一つの式にまとめられる
- IF の入れ子より読みやすく、修正しやすい
まずはこの型を覚えておくと便利です。
=LET(
チェック名1, 判定式1,
チェック名2, 判定式2,
…,
最後に返すメッセージ or 計算式
)
LET を使うと、
“どこが問題か分かりやすいシート”が作れるようになります。
検証ロジックを整理したいときは、ぜひ活用してみてください。
