Excel関数 逆引き集 | 文字列処理の共通化 → LAMBDA

Excel
スポンサーリンク

概要

同じような文字列処理の数式を、シートのあちこちで何度もコピペしていませんか。
例えば「前後スペースを取って」「全角英数を半角にして」「大文字にそろえて」といった“いつもの前処理”です。

こういう「何度も使う文字列処理」を、ひとつの“自作関数”として共通化できるのが LAMBDA 関数です。
プログラミングでいう「関数」や「メソッド」を Excel だけで定義できるイメージです。

ここでは、
文字列処理を LAMBDA で共通化する考え方
よくある処理のテンプレート
実際の登録手順と例題
を、プログラミング初心者向けにかみ砕いて説明します。


LAMBDAの基本イメージ

LAMBDA は「入力を受け取って、処理して、結果を返す式」を作るための仕組みです。
簡単に言うと、「セルに書いてきた数式を、そのまま“自作関数”に格上げ」できるものです。

もっともシンプルな例は次のような形です。

=LAMBDA(x, x & "さん")

これは「x を受け取って、末尾に“さん”をくっつけて返す」という関数の“設計図”です。
このままだとまだ“その場でしか使えない関数”なので、
定義した LAMBDA を「名前の定義」と組み合わせて保存し、
自作関数として呼び出します。


名前の定義としてLAMBDAを登録する流れ

具体的な操作イメージを文章で整理します。
実際の Excel の画面を思い浮かべながら読んでください。

まず、普通の式として LAMBDA を書いて動作を確認します。
例えば、A2 の文字列を大文字にして前後スペースを削る処理なら、まずこう書いて確認します。

=UPPER(TRIM(A2))

「これを自作関数にしたい」と決めたら、この式を LAMBDA で包みます。
引数名を text とすると、次のようになります。

=LAMBDA(text, UPPER(TRIM(text)))

ここまで書けたら、数式タブから「名前の管理」や「名前の定義」を開き、新しい名前(例:NORM_TEXT)を作り、その「参照範囲」に上の LAMBDA をそのまま貼り付けます。

保存できたら、シート上で次のように呼び出せます。

=NORM_TEXT(A2)

以降は「自作の文字列処理関数」として、他のセルでもどのシートでも呼び出せるようになります。


文字列処理を共通化するメリット

一度 LAMBDA にしてしまうと、同じ処理をあちこちでコピペしなくてよくなります。
数式が短く読みやすくなるので、「このセル何してるの?」が減ります。

修正も一か所で済みます。
例えば「やっぱり半角カナも全角にしたい」となったとき、従来なら該当セル全部を書き換える必要がありましたが、LAMBDA の中身だけ直せば、使っている全セルに自動で反映されます。

また、「こういう文字列処理はうちのシートでは必ずこれ」という“社内ルール”“自分ルール”を、関数として固定できるので、作業者が変わっても処理がブレにくくなります。


具体例1:文字列の標準化関数を共通化する

よくやる前処理を一つの関数にまとめてみます。
例えば、次のような標準化を毎回やっているとします。

前後のスペースを削除したい
複数スペースを一つにしたい
大文字小文字の違いをなくしたい(すべて大文字に統一)

試しに A2 の文字列に対して式を組むと、次のようになります。

=UPPER(TRIM(A2))

これを LAMBDA 化するとこうなります。

=LAMBDA(text, UPPER(TRIM(text)))

この式を名前の定義で NORM_TEXT という名前で登録すれば、シート上では次のように使えます。

=NORM_TEXT(A2)

「前処理は全部これを通す」と決めてしまうことで、
検索条件の比較や重複チェックなどが安定して行えるようになります。


具体例2:禁止文字を一括マスクするLAMBDA

例えば、「ファイル名に使えない文字を“_”に置き換えたい」というケースを考えます。
禁止文字として \ / : * ? " < > | を「全部アンダースコアにしたい」とします。

普通のセル式として試すなら、A2 に対して次のように書けます。

=SUBSTITUTE(
  SUBSTITUTE(
    SUBSTITUTE(
      SUBSTITUTE(A2,"\","_"),
    "/","_"),
  ":","_"),
"*","_")

実際にはさらにネストが増えますが、考え方は同じです。
これを LAMBDA にすると、引数名を text として次のようになります。

=LAMBDA(text,
  SUBSTITUTE(
    SUBSTITUTE(
      SUBSTITUTE(
        SUBSTITUTE(
          SUBSTITUTE(
            SUBSTITUTE(
              SUBSTITUTE(
                SUBSTITUTE(
                  SUBSTITUTE(text,"\","_"),
                "/","_"),
              ":","_"),
            "*","_"),
          "?","_"),
        """","_"),
      "<","_"),
    ">","_"),
  "|","_")
)

長く見えますが、「禁止文字置換ロジック」を一か所に閉じ込めているだけです。
これを、名前の定義で SANITIZE_FILENAME などの名前で登録すれば、シート上ではこう書けます。

=SANITIZE_FILENAME(A2)

どのシートでも「禁止文字対策はこれ」と統一できるようになります。


具体例3:メールアドレスの簡易クリーニング関数

完全な妥当性チェックは難しいですが、最低限の「よくあるミス」を共通処理にできます。
例えば、次のようなルールを想定します。

前後のスペースを削除する
全角英数字を半角にしたい(ここでは例示として簡略化)
大文字を小文字に統一したい

全角半角変換は標準関数だけだと難しいので、ここでは「前後スペース削除+小文字化」だけを LAMBDA にします。

A2 に対する通常の式は次のようになります。

=LOWER(TRIM(A2))

これを LAMBDA にします。

=LAMBDA(address, LOWER(TRIM(address)))

名前の定義で CLEAN_MAIL という名前を付ければ、シート上ではこう呼べます。

=CLEAN_MAIL(A2)

全てのメールアドレス列で同じクリーニングをかけられます。
後からルールを追加したくなったら、LAMBDA の中身にだけ処理を足していけばOKです。


LAMBDAの作り方テンプレート

自分で文字列処理 LAMBDA を設計するときは、次の順番で考えると整理しやすくなります。

まず、通常のセル数式として「やりたい処理」を A2 などに対して完成させる。
例として
=UPPER(TRIM(A2))
のような形にします。

次に、A2 の代わりに「引数名」を入れます。
例えば text という名前にすると、
=UPPER(TRIM(text))
という形になります。

この式全体を LAMBDA で包みます。

=LAMBDA(text, UPPER(TRIM(text)))

この LAMBDA を「名前の定義」にそのまま貼り付け、関数名となる名前を付けます。
例:NORM_TEXT

最後に、シート上で
=NORM_TEXT(A2)
のように呼び出して、期待通りの結果になるか確認します。

この型さえ身につけば、どんな文字列処理でも「共通関数」として切り出せるようになります。


例題

問題1

A2 の文字列に対して、前後のスペースを削除し、すべて小文字にする処理を共通化したいです。
引数名を text とした LAMBDA の形を作ってください。

=LAMBDA(text, LOWER(TRIM(text)))

問題2

A2 の文字列から、"-" を全部削除し、その結果を返す自作関数 STRIP_HYPHEN を作りたいです。
引数名を s として、LAMBDA の本体になる式を書いてください。

=LAMBDA(s, SUBSTITUTE(s,"-",""))

問題3

A2 の文字列について、
前後のスペース削除
大文字化
の両方を行う標準化関数 NORM_TEXT を作りたいです。
引数名を text として、LAMBDA 式を書いてください。

=LAMBDA(text, UPPER(TRIM(text)))

問題4

A2 の文字列から、"@" を含むかどうかを判定し、
含む場合は TRUE、含まない場合は FALSE を返す関数 HAS_AT を作りたいです。
引数名を address として、LAMBDA 式を書いてください。

=LAMBDA(address, ISNUMBER(SEARCH("@", address)))

問題5

A2 の文字列について、
" "(全角スペース)を普通の半角スペース " " に置き換えた上で、前後のスペースを削除する関数 FIX_SPACE を作りたいです。
引数名を text として、LAMBDA 式を書いてください。

=LAMBDA(text, TRIM(SUBSTITUTE(text," "," ")))

LAMBDA は、今まで「毎回同じように書いていた長い文字列処理の数式」を、
一つの“名前付き関数”にまとめるための仕組みです。
まずは、自分がよくやる文字列の前処理を一つ選び、「これを自作関数にするとしたら?」と考えてみるところから始めると、Excel が一気に“プログラムっぽく”扱えるようになっていきます。

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