【VBAリファレンス】エクセル入門MAKEARRAY関数(行数・列数で計算した配列を作成)

スポンサーリンク

エクセルMAKEARRAY関数:動的配列生成によるデータ処理の革命

エクセルにおけるデータ処理のパラダイムは、Microsoft 365の導入とスピル(Spill)機能の実装によって劇的に変化しました。その中でも、特に高度なデータ生成能力を秘めているのが「MAKEARRAY関数」です。従来のVBAによるループ処理や、複雑なINDEX・OFFSET関数の組み合わせを過去のものにする可能性を秘めたこの関数は、プロフェッショナルなエンジニアにとって必須のツールと言えます。本記事では、MAKEARRAY関数の本質的な仕組みから、実務で即戦力となる応用テクニックまでを詳細に解説します。

MAKEARRAY関数の基本構造と概念

MAKEARRAY関数は、指定した行数と列数を持つ配列を、ラムダ関数(LAMBDA)を用いて動的に生成する関数です。これまでのエクセル関数は「既存のセル範囲」を操作するものが主でしたが、MAKEARRAYは「計算式から新しいデータをゼロから作り出す」という、プログラミング的なアプローチを可能にします。

構文は以下の通りです。
MAKEARRAY(rows, cols, lambda)

1. rows: 生成する配列の行数(整数)
2. cols: 生成する配列の列数(整数)
3. lambda: 各要素を算出するための関数。引数として「行インデックス」と「列インデックス」を受け取ります。

この関数の最大の特徴は、インデックス(現在の行番号と列番号)を引数として受け取り、それに基づいた値を各セルに割り当てることができる点にあります。これは、プログラミングにおける二重ループを関数型言語の形式で表現していることに他なりません。

詳細解説:なぜMAKEARRAYが強力なのか

多くのユーザーが「なぜわざわざMAKEARRAYを使うのか?セルに直接数式を書けばいいのではないか?」と疑問に思うかもしれません。しかし、MAKEARRAYの真価は「データの動的な再構築」にあります。

第一に、計算の効率化です。数千行にわたるデータに対して、個別のセルに数式をコピー&ペーストすると、ファイルサイズが肥大化し、再計算のオーバーヘッドが増大します。MAKEARRAYは一つのセルに数式を入力するだけで、指定した範囲全体をメモリ上で計算し、結果をスピルさせます。これにより、シート上の数式管理が劇的にシンプルになります。

第二に、構造化されたデータ生成です。例えば、特定の規則性を持つマトリックス(行列)や、複雑な条件分岐を含む表を生成する場合、従来の関数ではネストが深くなりすぎて可読性が著しく低下しました。MAKEARRAYとLAMBDAを組み合わせることで、ロジックを独立させ、メンテナンス性の高いコード(数式)を作成することが可能になります。

サンプルコード:実務で活用するMAKEARRAY

以下に、実務で遭遇する頻度の高いシナリオを想定したサンプルコードを提示します。


' シナリオ1:掛け算九九表を動的に生成する
' 行インデックス(r)と列インデックス(c)を掛け合わせるだけのシンプルな例
=MAKEARRAY(9, 9, LAMBDA(r, c, r * c))

' シナリオ2:月次売上予測表の生成
' 1行目に月、1列目に製品名を配置し、各セルの値を計算する
' 応用例として、特定の成長率を適用した売上予測を作成
=MAKEARRAY(5, 12, LAMBDA(r, c, 1000 * (1 + 0.05 * (c - 1)) * r))

' シナリオ3:条件付きの行列データ生成(チェックリストの作成)
' 行番号が奇数の場合は「A」、偶数の場合は「B」とし、列番号を付与する
=MAKEARRAY(10, 3, LAMBDA(r, c, IF(ISODD(r), "A-" & c, "B-" & c)))

特に注目すべきは、第三の例です。MAKEARRAYの中でIF関数や他の計算ロジックを柔軟に組み合わせることで、単なる数値の羅列ではない、ビジネスロジックに基づいた複雑な表をわずか一行で生成できることがわかります。

実務アドバイス:VBAエンジニアの視点から

VBAで長年開発を行ってきたエンジニアにとって、MAKEARRAYは非常に親しみやすい概念です。VBAにおける `For r = 1 to maxR` から `For c = 1 to maxC` というネスト構造と、MAKEARRAYの動作は本質的に同じです。

しかし、実務で導入する際には以下の点に注意してください。

1. パフォーマンスの限界: MAKEARRAYは非常に強力ですが、LAMBDA内での計算が極めて重い場合(例えば、膨大な範囲のVLOOKUPを繰り返すなど)、再計算のたびにシート全体がフリーズするリスクがあります。複雑なロジックを組む場合は、計算の最適化(演算回数の最小化)を考慮してください。

2. メンテナンス性の確保: 数式が長大になる場合は、LET関数を併用することを強く推奨します。LET関数で中間変数を定義することで、可読性が飛躍的に向上します。
例: =MAKEARRAY(10, 10, LAMBDA(r, c, LET(val, r*c, IF(val>50, “Over”, val))))

3. 互換性の考慮: MAKEARRAYは比較的新しい関数です。古いバージョンのエクセルを使用している環境ではエラーとなります。組織内で共有するファイルであれば、利用環境のバージョンチェックを事前に行うことが不可欠です。

まとめ:次世代のエクセル活用に向けて

MAKEARRAY関数は、エクセルが単なる「表計算ソフト」から「データ構築プラットフォーム」へと進化していることを象徴する機能です。行と列をインデックスとして制御するという概念は、データサイエンスやプログラミングの基礎そのものです。

これまで、VBAでしか実現できなかったような動的な表作成や、複雑なアルゴリズムによるデータ展開が、標準関数だけで完結できるようになりました。これは、コードの記述量を減らし、バグの混入リスクを下げ、何より「誰でも高度なデータ処理ができる」環境を整えることに繋がります。

エクセルを単にデータを入力する場所としてではなく、ロジックを実装する環境として捉え直してください。MAKEARRAYを使いこなすことで、あなたの生産性は間違いなく一段上のステージへと引き上げられるはずです。まずは単純な九九表から始め、徐々に複雑なビジネスロジックをこの関数に落とし込んでみることをお勧めします。技術は使ってこそ磨かれるものです。今日からあなたのワークブックにMAKEARRAYを取り入れ、その圧倒的な効率化を実感してください。

タイトルとURLをコピーしました