Microsoft365のExcelには、繰り返しで長い数式の簡素化に活用できるREDUCE関数があります。
例えば、複数の置換対象の文字列がある場合に「SUBSTITUTE関数」を入れ子で繰り返すような数式を簡素化できる関数です。しかしながら、活用には慣れが必要な関数と感じたので、具体的な活用事例の備忘録です。
内容:
動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2411)です。
アウトプットイメージと数式
REDUCE関数とLAMBDA関数の活用事例の前提は、【Excel】名簿の表記揺れを修正する方法(会社名の㈱と(株)など混在) - shikumika’s diaryとします。
この事例はSUBSTITUTE関数ではなくREGEXREPLACE関数を使用することで数式を簡素化する方法を紹介しています。しかしながら、REGEXREPLACE関数が使用できない場合は、次のようにSUBSTITUTE関数を5回繰り返すネスト(入れ子)になっています。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, "㈱", "株式会社"), "(株)", "株式会社"), "(株)", "株式会社"), "(株)", "株式会社"), "(株)", "株式会社")
今回は、この数式をREDUCE関数とLAMBDA関数を使用して簡素化します。
まず結論として次のような数式で同様の結果が得られます。
= REDUCE(A2, {"㈱","(株)","(株)","(株)","(株)"}, LAMBDA(置換前,置換文字, SUBSTITUTE(置換前, 置換文字, "株式会社")))
数式の解説
上記数式は、ExcelのREDUCE関数とLAMBDA関数を使用して、セルA2の内容に含まれる特定の文字列を「株式会社」に置換する方法を示しています。
REDUCE関数とは
REDUCE関数は、配列の各要素に対して累積的な処理を行うために使用されます。この場合、セルA2の内容に対して置換処理を行います。
基本構文は次のとおりです。
=REDUCE(初期値, 繰り返す配列, lambda(アキュムレータ, 値, 本文))
初期値
上記数式で、セルA2はREDUCE関数の初期値として使用されます。
この値が、LAMBDA関数で「アキュームレータ(累積値)」で繰り返しの処理の初期値になります。
配列
{"㈱","(株)","(株)","(株)","(株)"}は、置換対象の文字列を含む配列です。この配列の各要素に対して置換処理が行われます。
lambda(アキュムレータ, 値, 本文)
LAMBDA関数の基本構文は次のとおりです。
=LAMBDA([parameter1, parameter2, …,] calculation)
REDUCE関数では、LAMBDA関数にlambda(アキュムレータ, 値, 本文(数式))をとります。
この事例ではparameter1にアキュームレータの”置換前”、parameter2に配列の値(置換文字)が代入され、SUBSTITUTE関数関数が計算される構文です。
LAMBDA(置換前, 置換文字, SUBSTITUTE(置換前, 置換文字, "株式会社"))
これが、REDUCE関数内で使用されるカスタム関数です。
置換前は繰り返し処理中の値です。置換文字は配列の現在の要素を表します。
これによって、SUBSTITUTE(置換前, 置換文字, "株式会社")は、置換前の内容から置換文字を「株式会社」に置換します。
このように、REDUCE関数とLAMBDA関数を活用すると、繰り返しで長くなった数式の簡素化が可能です。
なお、REGEXREPLACE関数が利用できるExcelバージョンの場合、今回の事例の置換はSUBSTITUTE関数ではなくREGEXREPLACE関数が最適だと思います。
参考:LAMBDA関数の活用例
以上、ExcelでREDUCE関数とLAMBDA関数を活用し、繰り返しで長い数式を簡素化する事例でした。