Excel関数 逆引き集 | 再利用可能文字関数 → LAMBDA

Excel
スポンサーリンク

概要

同じような「文字列いじり」の数式を、シートのあちこちでコピペしていませんか。

  • 前後スペースを取る
  • 特定文字を削除する
  • メールアドレスを小文字にそろえる
  • 禁止文字を別の文字に置き換える

こういう処理を毎回書くのは面倒だし、ミスの元です。
そこで登場するのが LAMBDA 関数で作る“再利用可能な文字関数” です。

「一度だけちゃんと作って、あとは関数名で呼び出す」
プログラミングでいう“自作関数”を Excel で実現できます。


LAMBDAで「自作文字関数」を作る基本の流れ

基本の考え方

LAMBDA のイメージはこうです。

=LAMBDA(引数1, 引数2, ..., 計算式)

文字列の関数なら、例えば

=LAMBDA(text, TRIM(text))

これは
「text という入力を受け取り、TRIM(text) を返す」
という“関数の設計図”です。

名前の定義として登録する

1回限りならセルに直接 LAMBDA と書いてもいいですが、
「再利用可能な関数」にするには 名前の定義 と組み合わせます。

イメージ:

  1. まず LAMBDA を完成させる
    例:=LAMBDA(text, UPPER(TRIM(text)))
  2. 数式タブ → 名前の管理(または名前の定義)
  3. 新しい名前を作成(例:NORM_TEXT)
  4. 「参照範囲」に上の LAMBDA をそのまま貼り付けて保存
  5. シート上では
    =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 から書こうとすると混乱しやすいです。
必ず、

  1. まず A2 などを対象に、普通の式として完成させる
  2. その式の中の A2 を「引数名」に置き換える
  3. 全体を LAMBDA で包む
  4. 名前の定義に登録する

という順番を守ると失敗しにくくなります。

引数名は「処理の意味」がわかる名前にする

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個でいいので「再利用可能な文字関数」にしてみてください。そこから一気に世界が広がります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました