概要
同じような「文字列いじり」の数式を、シートのあちこちでコピペしていませんか。
- 前後スペースを取る
- 特定文字を削除する
- メールアドレスを小文字にそろえる
- 禁止文字を別の文字に置き換える
こういう処理を毎回書くのは面倒だし、ミスの元です。
そこで登場するのが LAMBDA 関数で作る“再利用可能な文字関数” です。
「一度だけちゃんと作って、あとは関数名で呼び出す」
プログラミングでいう“自作関数”を Excel で実現できます。
LAMBDAで「自作文字関数」を作る基本の流れ
基本の考え方
LAMBDA のイメージはこうです。
=LAMBDA(引数1, 引数2, ..., 計算式)
文字列の関数なら、例えば
=LAMBDA(text, TRIM(text))
これは
「text という入力を受け取り、TRIM(text) を返す」
という“関数の設計図”です。
名前の定義として登録する
1回限りならセルに直接 LAMBDA と書いてもいいですが、
「再利用可能な関数」にするには 名前の定義 と組み合わせます。
イメージ:
- まず LAMBDA を完成させる
例:=LAMBDA(text, UPPER(TRIM(text))) - 数式タブ → 名前の管理(または名前の定義)
- 新しい名前を作成(例:NORM_TEXT)
- 「参照範囲」に上の LAMBDA をそのまま貼り付けて保存
- シート上では
=NORM_TEXT(A2)
のように普通の関数として呼び出せる
これで「再利用可能な文字関数」の完成です。
よく使う再利用可能文字関数の例
標準化関数1:前後のスペース削除+小文字化
よくある「前処理セット」です。
A2 に対して普通の式で書くならこうなります。
=LOWER(TRIM(A2))
これを再利用可能にしたいので LAMBDA 化します。
=LAMBDA(text, LOWER(TRIM(text)))
これを CLEAN_TEXT などの名前で登録しておけば、
シート上では
=CLEAN_TEXT(A2)
と書くだけで、どこでも同じ処理を再利用できます。
標準化関数2:全角スペースを半角に統一+前後スペース削除
日本語データでは「全角スペース」が厄介です。
A2 に対しての通常の式はこうです。
=TRIM(SUBSTITUTE(A2," "," "))
これを LAMBDA にします。
=LAMBDA(text, TRIM(SUBSTITUTE(text," "," ")))
名前を FIX_SPACE として登録すれば、
=FIX_SPACE(A2)
と呼び出せます。
「スペース問題対策」は全部この関数に任せる、という運用にできます。
変換関数:特定文字を一括削除/置換する
例として「ハイフンを削除する関数」を作ってみます。
通常式(A2 対象)はこうです。
=SUBSTITUTE(A2,"-","")
LAMBDA にすると:
=LAMBDA(text, SUBSTITUTE(text,"-",""))
名前 STRIP_HYPHEN として登録すれば、
=STRIP_HYPHEN(A2)
で再利用できます。
同じパターンで、禁止文字をアンダースコアに置換する関数も作れます。
=LAMBDA(text,
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(text,"/","_"),
"\","_"),
":","_")
)
名前を SANITIZE_NAME にしておけば、
=SANITIZE_NAME(A2)
だけで共通ルールの置換処理が呼べます。
判定関数:文字列の条件チェックを関数化する
「メールアドレスっぽいか?」「“@” を含むか?」などの判定も、
TRUE / FALSE を返す関数として共通化できます。
例:"@" を含むかどうかの関数
通常式(A2 対象)はこうです。
=ISNUMBER(SEARCH("@",A2))
LAMBDA にすると:
=LAMBDA(address, ISNUMBER(SEARCH("@", address)))
名前 HAS_AT として登録すれば、
=HAS_AT(A2)
で判定できます。
同様に、「数字だけで構成されているか?」なども関数にできます。
再利用可能文字関数を設計するときのコツ
まず「1セル用の普通の式」を完成させる
いきなり LAMBDA から書こうとすると混乱しやすいです。
必ず、
- まず A2 などを対象に、普通の式として完成させる
- その式の中の A2 を「引数名」に置き換える
- 全体を LAMBDA で包む
- 名前の定義に登録する
という順番を守ると失敗しにくくなります。
引数名は「処理の意味」がわかる名前にする
text, s, address, name など、
「その文字列が何なのか」が分かる名前にしておくと、
後から見たときに式の意味が追いやすくなります。
例題
問題1
A2 の文字列に対して、
前後のスペースを削除し、すべて大文字にして返す再利用関数 NORM_TEXT を作りたいです。
引数名を text として、LAMBDA 式を書いてください。
=LAMBDA(text, UPPER(TRIM(text)))
問題2
A2 の文字列から、すべての空白(半角スペース " ")を削除する関数 STRIP_SPACE を作りたいです。
引数名を s として、LAMBDA 式を書いてください。
=LAMBDA(s, SUBSTITUTE(s," ",""))
問題3
A2 の文字列について、
全角スペースを半角スペースに置き換え、その後 TRIM で前後スペースを削除する関数 FIX_SPACE を作りたいです。
引数名を text として、LAMBDA 式を書いてください。
=LAMBDA(text, TRIM(SUBSTITUTE(text," "," ")))
問題4
A2 の文字列に "@" が含まれていれば TRUE、含まれていなければ FALSE を返す関数 HAS_AT を作りたいです。
引数名を addr として、LAMBDA 式を書いてください。
=LAMBDA(addr, ISNUMBER(SEARCH("@", addr)))
問題5
A2 の文字列から "-" と " "(ハイフンと半角スペース)を両方削除する関数 CLEAN_CODE を作りたいです。
引数名を code として、LAMBDA 式を書いてください。
=LAMBDA(code, SUBSTITUTE(SUBSTITUTE(code,"-","")," ",""))
「よく書く文字列処理」を1つでも LAMBDA 化してみると、
「あ、もう同じ式を何回も書かなくていいんだ」と感覚が変わります。
まずは、あなたが日常的にやっている“いつもの文字いじり”を、
1個でいいので「再利用可能な文字関数」にしてみてください。そこから一気に世界が広がります。
