Excel 365以降では、動的配列(スピル)によって、1つの数式から複数セルにわたる結果を自動的に展開できるようになりました。
このスピル機能は非常に便利ですが、VBAを使ってスピル範囲かどうかを判別したい場面もあります。
本記事では、VBAを使ってセルがスピルの一部かどうかを判定し、その起点セルを取得する方法をご紹介いたします。
目次
想定される活用場面
- スピル結果のセルであるかを判別し、起点セルを取得したい。
- スピル範囲を自動でハイライト表示したい。
- スピルを含むシート構造の自動チェックやデバッグを行いたい。
VBAコードの例
以下のコードは、選択中のセルがスピル範囲であるかどうかを判定し、起点セルのアドレスをメッセージで表示します。
Sub CheckIfSpillCell()
Dim targetCell As Range
Set targetCell = ActiveCell
If targetCell.HasSpill Then
MsgBox "このセルはスピル範囲の一部です。" & vbCrLf & _
"スピルの起点セル:" & targetCell.SpillParent.Address, vbInformation
Else
MsgBox "このセルはスピル範囲ではありません。", vbExclamation
End If
End Sub
コードのポイント解説
機能 | 説明 |
---|---|
HasSpill | 対象のセルがスピル範囲の一部かどうかを判定するプロパティです(True/Falseを返します)。 |
SpillParent | スピルの起点(元となる数式が入力されているセル)を返します。 |
ActiveCell | 現在選択中のセルを対象としています。必要に応じて任意のセルへ変更可能です。 |
注意点
HasSpill
プロパティとSpillParent
プロパティは**Excel 365以降(動的配列対応版)**でのみ利用可能です。古いバージョンのExcelでは使用できません。- 起点セルとスピル範囲の関係は、削除・上書き・再計算などによって動的に変化するため、処理タイミングにはご注意ください。
まとめ
Excel VBAを使えば、セルがスピル範囲に属しているかどうかを簡単に判定し、その起点セルを取得することができます。
スピルを用いた関数や処理は、見た目にはシンプルでも裏で広い範囲に影響を与えていることがあるため、このようなチェック機能はエラートラップやデータ検証にも非常に有効です。
スピル機能を活用した高度な処理や、可視性の高いデータ構造を構築する上で、ぜひこの手法を取り入れてみてください。