MAPとREDUCEで繰り返し処理を行う
配列全体にLAMBDAを適用して、値を変換または累積します。
「MAPとREDUCEで繰り返し処理を行う」はCoddyKit上の無料Excel Formulas Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはExcel Formulas Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Excel Formulas Academyコースには全4レッスンが含まれています。
コードなしで繰り返し処理する
範囲内のすべての値に同じ計算を適用したり、範囲全体を1つの数値にまとめたりしたいことがあります。プログラミングでは、これはループと呼ばれます。最新のスプレッドシートでは、MAPとREDUCEがLAMBDAを使ってこの処理を実行します。
- MAPは配列の各要素を新しい要素に変換します
- REDUCEはすべての要素を1つの累積結果にまとめます
どちらも、各値に対して何をするかを記述したLAMBDAを受け取ります。これらはMicrosoft 365とGoogle Sheetsで使用できます。
MAPの仕組み
MAPは配列を順に処理し、各項目にLAMBDAを適用して、同じサイズの新しい配列を生成します。LAMBDAのパラメーターには、一度に1つの要素が渡されます。
基本形は、配列と、各値を表すパラメーターを持つLAMBDAをMAPに渡すことです。MAPは変換後の結果を自動的に複数のセルへスピルします。
=MAP(array, LAMBDA(value, calculation))MAPの最初の例
A2:A6に5つの価格があり、それぞれを10パーセント値上げするとします。MAPを使うと、すべての値に一度に値上げを適用できます。
LAMBDAのパラメーターpは、順番に各価格を表します。MAPは入力セルごとに1つずつ、5つの結果を返し、列方向にスピルします。
フィルハンドルをドラッグしたり、コピーしたりする必要はありません。1つの数式で範囲全体を処理できます。
=MAP(A2:A6, LAMBDA(p, p*1.1))2つの配列でMAPを使う
MAPは2つの配列を並行して処理できます。この場合、LAMBDAは各配列から1つずつ、位置に対応した2つのパラメーターを受け取ります。
ここでは、A2:A6の数量にB2:B6の価格を掛けて、行ごとの合計を求めます。パラメーターqは各数量に、prは各価格に対応します。
2つの配列のサイズが同じでない場合、エラーになります。
=MAP(A2:A6, B2:B6, LAMBDA(q, pr, q*pr))REDUCEの仕組み
REDUCEは配列を1つの値にまとめます。その際、各要素で更新されるアキュムレーターを保持します。
REDUCEには、アキュムレーターの開始値、配列、そして2つのパラメーターを持つLAMBDAの3つを指定します。accは実行中の合計、valueは現在の要素を表します。LAMBDAは各ステップで新しいアキュムレーターを返します。
=REDUCE(start, array, LAMBDA(acc, value, new_accumulator))REDUCEの最初の例
REDUCEを使って範囲を合計してみましょう(SUMでも同じことができますが、仕組みを明確に示せます)。
アキュムレーターを0から始めます。A2:A6の各値について、LAMBDAがその値をaccに加えます。最後の要素まで処理すると、accに合計が入ります。
値が10、20、30の場合、アキュムレーターは0、10、30、60と変化し、最後は60になります。
=REDUCE(0, A2:A6, LAMBDA(acc, v, acc + v))累積積にREDUCEを使う
演算を変えると、REDUCEで別の処理ができます。すべての値を掛け合わせるには、アキュムレーターを1から始め、各ステップで掛け算を行います。
これは積を計算する方法で、複利の成長係数などに役立ちます。開始値は重要です。合計には0、積には1を使います。これらがそれぞれの演算における中立な開始値だからです。
=REDUCE(1, A2:A6, LAMBDA(acc, v, acc * v))MAPとREDUCEの組み合わせ
1つの数式で、MAPによる変換とREDUCEによる集計を行えます。よくある処理の1つが、範囲内の値を二乗して合計することです。
ここではMAPで各値を二乗し、その結果を配列としてREDUCEに渡し、0から始めて加算します。
=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))Google SheetsでのMAPとREDUCE
Google Sheetsには、両方の関数が同じ構文で用意されています。MAPは各要素にLAMBDAを適用し、REDUCEは開始値、配列、2つのパラメーターを持つLAMBDAを使って累積します。
Sheetsには、関連するヘルパー関数としてSCANもあります。SCANはREDUCEに似ていますが、最終結果だけでなく、途中のアキュムレーターもすべて返します。ExcelにもSCANがあります。
=SCAN(0, A2:A6, LAMBDA(acc, v, acc + v))ヒントと注意点
覚えておくべき点をいくつか紹介します。
- MAPでは、LAMBDAが要素ごとに1つの値を返す必要があります
- REDUCEでは、LAMBDAが必ず新しいアキュムレーターを返すようにします
- 適切な開始値を選びます。合計は0、積は1、テキストの結合は空の文字列です
- 一緒に渡す配列は、同じ次元である必要があります
迷ったら、まず1つの値に対してLAMBDAをインラインでテストしてください。
それぞれを使う場面
入力ごとにそれぞれ結果が必要な場合は、MAPを使います。たとえば、すべての値に値上げや書式設定を適用する場合です。
多くの値を1つにまとめたい場合は、REDUCEを使います。独自の合計、連結、独自のロジックによる最大値の検出などが該当します。
この2つを組み合わせると、以前のスプレッドシートでは1つの数式で実現できなかったループ処理を表現できます。
確認テスト
REDUCEについて理解度を確認しましょう。
まとめ:MAPとREDUCEによる繰り返し処理
LAMBDAを利用する関数で、配列を繰り返し処理する方法を学びました。
- MAPは各要素を新しい要素に変換し、配列を返します
- REDUCEはアキュムレーターを使って配列を1つの値にまとめます
- 合計には0、積には1など、適切な開始値を選びます
- MAPでは複数の配列を対応付けられます。MAPとREDUCEを組み合わせると、強力な1行の集計を作成できます
- SCANは途中の各ステップを表示します
次は、LAMBDAを名前付き関数として保存し、ブック全体で整理された再利用可能な数式として使う方法を学びます。
=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))AI チューターと学ぶ Excel — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「MAPとREDUCEで繰り返し処理を行う」レッスンは無料ですか?
はい。「MAPとREDUCEで繰り返し処理を行う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Excel Formulas Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Excel Formulas Academyコースには全4レッスンが含まれています。
「MAPとREDUCEで繰り返し処理を行う」で何を学びますか?
配列全体にLAMBDAを適用して、値を変換または累積します。 ブラウザで直接実行するハンズオンコードでExcel Formulas Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Excel Formulas Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのExcel Formulas Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「MAPとREDUCEで繰り返し処理を行う」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このExcel Formulas Academyレッスンでコードを書いて実行できますか?
はい。すべてのExcel Formulas Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LETで処理手順に名前を付ける
- LAMBDAでカスタム関数を定義する
- MAPとREDUCEで繰り返し処理を行う
- 名前付きLAMBDAで数式を整理する