Excel VBAでスピル配列をEvaluate関数で処理する方法|2次元配列を数式で一括生成

Excel 365以降では、スピル機能(Spill Formula)を使って複数の値を一括で返す配列数式が利用可能です。
この機能はVBAからも活用することができ、Application.Evaluateを使えばワークシート関数の配列演算結果を、直接VBAで受け取ることができます。

本記事では、VBAでスピル形式の数式を評価し、配列として取得・活用する方法をご紹介いたします。


目次

想定される活用シーン

  • ワークシート関数の計算結果を一括で2次元配列として扱いたい。
  • VBA内で複雑な演算処理をExcel関数で簡潔に表現したい。
  • マクロ内で軽量かつ高速な数式処理を実現したい。

VBAコードの例

以下のコードでは、=10*{1,2;3,4} という配列数式をEvaluate関数で評価し、その結果を2次元配列として取得し、即座に処理(デバッグ出力)しています。

Sub CalculateSpillFormula()

    Dim calcResult As Variant

    ' スピル形式の配列数式を評価
    calcResult = Application.Evaluate("=10*{1,2;3,4}")

    ' 評価結果の表示(例:デバッグウィンドウ)
    Debug.Print "1行目: "; calcResult(1, 1), calcResult(1, 2)
    Debug.Print "2行目: "; calcResult(2, 1), calcResult(2, 2)

End Sub

処理の結果

上記のコードでは、配列 {1,2;3,4}10 を掛けて以下のような2次元配列が生成されます:

列1列2
行11020
行23040

ポイント解説

処理内容解説
Application.EvaluateExcelのワークシート関数や式を、VBA内で評価する関数です。
{1,2;3,4}配列リテラル(スピル形式)。行区切りはセミコロン;、列区切りはカンマ,
calcResult(行, 列)VBAでは1から始まる2次元配列として取得されます。

応用のヒント

  • 数式の中で SEQUENCETRANSPOSE 関数なども利用可能です(Excel 365以降)。
  • VBA内で計算用に使うだけでなく、セル範囲に書き込むことも可能です:
Range("B2:C3").Value = calcResult

まとめ

VBAでスピル形式の数式を使いたい場合は、Application.Evaluate関数を活用することで、Excelの配列数式のパワーをVBA内でも簡単に取り込むことができます。
大量のループ処理を省略できるため、パフォーマンスも良好で、ワークシート関数の強みをそのまま活かすことが可能です。

シンプルな配列演算から応用的な数式処理まで、ぜひこのテクニックを取り入れて、VBAの効率化を実現してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次