shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel】REDUCE関数とLAMBDA関数の活用例(繰り返しで長い数式の簡素化)

 

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(置換前, 置換文字, "株式会社")))

REDUCE関数とLAMBDA関数、SUBSTITUTE関数を利用している

REDUCE関数とLAMBDA関数の活用例

数式の解説

上記数式は、ExcelのREDUCE関数とLAMBDA関数を使用して、セルA2の内容に含まれる特定の文字列を「株式会社」に置換する方法を示しています。

REDUCE関数とは

REDUCE関数は、配列の各要素に対して累積的な処理を行うために使用されます。この場合、セルA2の内容に対して置換処理を行います。

基本構文は次のとおりです。

=REDUCE(初期値, 繰り返す配列, lambda(アキュムレータ, 値, 本文))

参考: REDUCE 関数 - Microsoft サポート

初期値

上記数式で、セルA2はREDUCE関数の初期値として使用されます。

この値が、LAMBDA関数で「アキュームレータ(累積値)」で繰り返しの処理の初期値になります。

配列

{"㈱","(株)","(株)","(株)","(株)"}は、置換対象の文字列を含む配列です。この配列の各要素に対して置換処理が行われます。

lambda(アキュムレータ, 値, 本文)

LAMBDA関数の基本構文は次のとおりです。

=LAMBDA([parameter1, parameter2, …,] calculation) 

参考: LAMBDA 関数 - Microsoft サポート

REDUCE関数では、LAMBDA関数にlambda(アキュムレータ, 値, 本文(数式))をとります。

この事例ではparameter1にアキュームレータの”置換前”、parameter2に配列の値(置換文字)が代入され、SUBSTITUTE関数関数が計算される構文です。

LAMBDA(置換前, 置換文字, SUBSTITUTE(置換前, 置換文字, "株式会社"))

これが、REDUCE関数内で使用されるカスタム関数です。

置換前は繰り返し処理中の値です。置換文字は配列の現在の要素を表します。

これによって、SUBSTITUTE(置換前, 置換文字, "株式会社")は、置換前の内容から置換文字を「株式会社」に置換します。

このように、REDUCE関数とLAMBDA関数を活用すると、繰り返しで長くなった数式の簡素化が可能です。

なお、REGEXREPLACE関数が利用できるExcelバージョンの場合、今回の事例の置換はSUBSTITUTE関数ではなくREGEXREPLACE関数が最適だと思います

参考:LAMBDA関数の活用例

shikumika.org

 

以上、ExcelでREDUCE関数とLAMBDA関数を活用し、繰り返しで長い数式を簡素化する事例でした。