概要
長い文字列式を書いていると、
・TRIM、SUBSTITUTE、LEFT、RIGHT、TEXT などがネストしまくって、もはや読めない
・ちょっと仕様変更するときに、同じ部分を何か所も直さなきゃいけない
・「この式、1か月後の自分は絶対理解できない…」
こういう“複雑な文字列式”を分解してスッキリさせてくれるのが LET 関数です。
LET は「途中結果に名前を付ける」ことで、
長い式を「意味のある部品」に分解して書けるようにする関数です。
ここでは、特に「文字列まわり」に絞って、
複雑な式を LET で分解する具体例とテンプレートを、初心者向けに解説します。
LET の基本イメージ(文字列版)
LET の形はこうです。
=LET(名前1, 値1, 名前2, 値2, …, 最後に返す式)
シンプルな文字列例でいうと、
=LET(
s, TRIM(A2),
UPPER(s)
)
これは
- s という名前で TRIM(A2) を定義する
- 最後に UPPER(s)(s を大文字化したもの)を返す
という意味になります。
ポイントは「一度計算した結果に名前を付けて、それを何度でも使える」ことです。
文字列処理だと、TRIM や SUBSTITUTE や LOWER/UPPER の結果を何度も使いたい場面が多いので、そこで威力を発揮します。
パターン1:同じ前処理を何度も書いている式を分解する
まず、よくある“悪い例”から。
例)A2 の文字列に対して
・前後スペースを削除
・全角スペースを半角に変換
・小文字にそろえる
・その文字数と、先頭3文字+末尾3文字を結合して表示
LET を使わないと、だいたいこんな地獄になります。
=LEN(LOWER(TRIM(SUBSTITUTE(A2," "," "))))
& ":"
& LEFT(LOWER(TRIM(SUBSTITUTE(A2," "," "))),3)
& "..."
& RIGHT(LOWER(TRIM(SUBSTITUTE(A2," "," "))),3)
同じ前処理を 3 回も書いていて、修正がつらいし、可読性も最低です。
ここで LET を使って、前処理を一か所にまとめます。
=LET(
cleaned, LOWER(TRIM(SUBSTITUTE(A2," "," "))),
LEN(cleaned) & ":" &
LEFT(cleaned,3) & "..." & RIGHT(cleaned,3)
)
この式は
- cleaned という名前で「全部の前処理結果」を定義
- あとは cleaned を使って LEN / LEFT / RIGHT を書くだけ
という構造です。
「何をしているのか」が読みやすくなり、
前処理のルール変更(たとえば SUBSTITUTE を一個足す)も cleaned の定義部分だけいじれば済みます。
パターン2:長い連結式を「部品ごと」に名前を付ける
ログ用メッセージやコード生成などで、
文字列を & でつなぎまくる式も、すぐカオスになります。
例)A2:氏名、B2:日付、C2:金額
次のようなメッセージを作りたいとします。
「2026-01-06 山田太郎 さんのご利用金額は 1,500 円です。」
LET を使わない式の例はこうなりがちです。
=TEXT(B2,"yyyy-mm-dd") & " " &
A2 & " さんのご利用金額は " &
TEXT(C2,"#,##0") & " 円です。"
これでもまだ短い方ですが、「日付部分」「名前部分」「金額部分」を部品(変数)として分けると、もっと読みやすくなります。
=LET(
d, TEXT(B2,"yyyy-mm-dd"),
name, A2 & " さん",
amount, TEXT(C2,"#,##0") & " 円",
d & " " & name & "のご利用金額は " & amount & "です。"
)
d / name / amount という“日本語に近い名前”を付けることで、
後半の式が「文章」として頭に入ってきやすくなります。
パターン3:複雑な条件分岐を分解する(文字列判定)
文字列を判定して「ラベル」を返す式も、
IF や OR をネストしだすと一瞬で読めなくなります。
例)A2 の文字列について
・”OK”(大文字小文字やスペース違いは無視)なら「合格」
・”NG” なら「要修正」
・”PENDING” が含まれていれば「保留」
・それ以外は空欄
LET なしの式を無理やり書くと、こんな感じになります。
=IF(LOWER(TRIM(A2))="ok","合格",
IF(LOWER(TRIM(A2))="ng","要修正",
IF(ISNUMBER(SEARCH("pending",LOWER(TRIM(A2)))),"保留","")))
TRIM と LOWER を何回も書いていて、目がすべります。
LET を使うとこうなります。
=LET(
s, LOWER(TRIM(A2)),
IF(s="ok","合格",
IF(s="ng","要修正",
IF(ISNUMBER(SEARCH("pending",s)),"保留","")
)
)
)
ポイントは、
・最初に s として「比較用のクリーンな文字列」を確定しておく
・後は s だけを条件式に登場させる
これで「何を判定している式なのか」が一目で分かります。
パターン4:中間結果を段階的に分解して読み下せる式にする
計算+文字列+条件が混ざるときほど、LET が効きます。
例)A2:数量、B2:単価、C2:税率
次のような文字列を作るとします。
「小計:1,000 円 税込:1,100 円(税額:100 円)」
まず中間計算の式を普通に書くとこうです。
小計 = A2B2
税額 = 小計C2
税込 = 小計+税額
LET なしで全部文字列にすると、
="小計:" & TEXT(A2*B2,"#,##0") & " 円 税込:" &
TEXT(A2*B2*(1+C2),"#,##0") & " 円(税額:" &
TEXT(A2*B2*C2,"#,##0") & " 円)"
同じ式 A2*B2 が何回も出てきて、修正しづらいですね。
LET を使うとこう整理できます。
=LET(
qty, A2,
price, B2,
rate, C2,
subtotal, qty*price,
tax, subtotal*rate,
total, subtotal+tax,
"小計:" & TEXT(subtotal,"#,##0") & " 円 税込:" &
TEXT(total,"#,##0") & " 円(税額:" &
TEXT(tax,"#,##0") & " 円)"
)
上から順に「計算の流れ」を追えるので、
プログラムを書いている感覚に近づきます。
パターン5:文字列式の分解テンプレート
自分で複雑な文字式を LET に乗せ替えるときの“型”をまとめておきます。
- まず、A2 を対象にした「普通の式」を完成させる
- 「何度も出てくる部分」「意味のある塊」を見つける
- それぞれに短い名前を付けて、LET の先頭に並べる
- 後半の式の中で、その名前を使うように書き換える
テンプレートの形はこんな感じです。
=LET(
base, 前処理済み文字列(TRIM, LOWER, SUBSTITUTE など),
part1, base を使った部分処理,
part2, base や part1 を使ったさらに別の処理,
最後に返したい文字列(base, part1, part2 を組み合わせ)
)
例えば、
=LET(
base, LOWER(TRIM(SUBSTITUTE(A2," "," "))),
code, LEFT(base,3),
tail, RIGHT(base,4),
code & " - " & tail
)
のように、「段階」を名前で区切っていくイメージです。
例題
問題1
A2 の文字列について、
全角スペースを半角スペースに変換し、その後 TRIM した結果を s として定義し、
s の文字数を返す LET 式を書いてください。
=LET(
s, TRIM(SUBSTITUTE(A2," "," ")),
LEN(s)
)
問題2
A2 の文字列について、
LOWER(TRIM(A2)) を cleaned として定義し、
cleaned の先頭2文字と末尾2文字を「-」でつないだ文字列(例:ab-xy)を返す LET 式を書いてください。
=LET(
cleaned, LOWER(TRIM(A2)),
LEFT(cleaned,2) & "-" & RIGHT(cleaned,2)
)
問題3
A2 の文字列について、
前後スペースを削除した結果を s として定義し、
s が “OK” なら「合格」、”NG” なら「要修正」、それ以外は空欄を返す LET 式を書いてください。
(大文字小文字は区別するものとします)
=LET(
s, TRIM(A2),
IF(s="OK","合格",IF(s="NG","要修正",""))
)
問題4
A2 の文字列について、
LOWER(TRIM(A2)) を base として定義し、
base に “error” が含まれていれば「エラー」、そうでなければ「正常」と返す LET 式を書いてください。
=LET(
base, LOWER(TRIM(A2)),
IF(ISNUMBER(SEARCH("error",base)),"エラー","正常")
)
問題5
A2:数量、B2:単価、C2:税率(0.1 など)が入力されています。
次の文字列を返す LET 式を書いてください。
・まず、subtotal = A2B2、tax = subtotalC2、total = subtotal+tax を LET で定義する
・最終結果として
「小計:xxxx 円/税込:yyyy 円」
(x, y はそれぞれ #,##0 形式で TEXT)
を返す式にしてください。
=LET(
qty, A2,
price, B2,
rate, C2,
subtotal, qty*price,
tax, subtotal*rate,
total, subtotal+tax,
"小計:" & TEXT(subtotal,"#,##0") & " 円/税込:" &
TEXT(total,"#,##0") & " 円"
)
LET は「複雑な文字式を、人間が理解できる単位に分解するための道具」です。
いきなり全部を LET に書き換えなくていいので、
まずは「同じ部分を何度も書いている長い式」から、1つずつ分解してみてください。
“訳の分からない巨大式”が、“意味の分かる小さなかたまり”に変わっていきます。
