残業を減らす!Officeテクニック
これなんて無理ゲー? 都道府県名の有無が不統一な住所から都道府県名を取り出す処理
「Excel Labs」と「LAMBDA関数」で複雑な関数式を簡略化してみる
2023年6月19日 06:55
Microsoft 365とWeb版のExcelで使える「LAMBDA関数」をご存じですか? 「ラムダ」と読みます。2022年の発表当時は、変数と計算式を指定してオリジナルの関数を作成できる! と話題になりました。「ヘルパー関数」を組み合わせて従来の関数では実現できない処理も実現可能です。
ただ、変数と計算式を自由に指定できると言われても困りますし、「名前の定義」とセットで利用する必要もあります。しかもヘルパー関数とは……? 実際のところ、あまり利用されていないようです。
そんな難易度高すぎなLAMBDA関数ですが、以前に紹介したChatGPTも使える実験アドイン「Excel Labs」からは便利に使えることもあるので紹介したいと思います。
住所から都道府県名を取り出すには?
以下の表では、会員リストに入力された住所から都道府県名を取り出しています。しかし、よく見ると「広島市」「奈良市」「葛飾区」など、都道府県名ではない文字列が抽出されています。
セルE2の数式「=IF(MID(D2,4,1)="県",LEFT(D2,4),LEFT(D2,3))」の意味は『住所の4文字目を判定して「県」なら先頭から4文字、そうでなければ先頭から3文字取り出す』です。これは[住所]列に都道府県名のない住所が入力されていることが問題ですね。目視ではチェック漏れしそうなので、数式で判定したいところです。
都道府県名が含まれていない住所を判定する
都道府県名のパターンは、3文字目が「都」「道」「府」「県」のいずれか、もしくは4文字目が「県」です。すべてOR条件でつなげることができます。
都道府県名以降の3,4文字目が「都」「道」「府」「県」の可能性を考慮するなら、VLOOKUP/XLOOKUP関数を利用して、都道府県名と突合する必要がありますが、ここでは上記の条件で数式を考えてみます。
=OR(MID(E2,3,1)="都", MID(E2,3,1)="道", MID(E2,3,1)="府", MID(E2,3,1)="県", MID(E2,4,1)="県")
数式の結果は「TRUE」か「FALSE」で返され、「TRUE」なら都道府県名が入力されていると判断できます。
この数式をセルE2にネストして、都道府県名が含まれていない場合に「■■■」と表示させるとしましょう。以下のような数式になりますが、長すぎて気が遠くなりますね。
=IF(OR(MID(E2,3,1)="都", MID(E2,3,1)="道", MID(E2,3,1)="府", MID(E2,3,1)="県", MID(E2,4,1)="県")=TRUE,IF(MID(E2,4,1)="県",LEFT(E2,4),LEFT(E2,3)),"■■■")
オリジナルの関数を定義する
そこで、都道府県名を判定する数式をオリジナルの関数として定義してみましょう。「Excel Labs」の出番です。ここでは関数名を「TDFK」としました。参照する対象は住所なので、変数名は「住所」としました。
作成した関数をネストする
定義した「TDFK関数」をセルE2の数式「=IF(MID(D2,4,1)="県",LEFT(D2,4),LEFT(D2,3))」にネストします。『TDFK関数の結果が「TRUE」なら、都道府県名を取り出す。そうでなければ「■■■」を表示する』の処理を記述します。
既存の数式の修正にも「Excel Labs」が便利。セルを選択して[Grid]タブに切り替えて入力済みの数式を表示します。
なお、[Shift]+[Ctrl]+[F]キーでインデントを自動調整すると、数式の構造を把握しやすくなります。いつもの数式を修正する際のエディターとして活用してもいいでしょう。