「excel2010 vba 数式が配列数式かどうか」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
セルに入力されている数式・計算式が、配列数式かどうかを判定するExcel VBA(Visual Basic for Applications)のコードを探している方による検索です。
配列数式かどうかは、RangeオブジェクトのHasArrayプロパティで調べることができます。
オブジェクトブラウザーで確認すると、上図のとおりHasArrayプロパティの戻りはVariantになっていますが、配列数式が存在しているときはTrueを返してきます。
アクティブセルが配列数式かを判定するサンプルマクロ
以下のようなマクロで、アクティブなセルに配列数式が入力されているかどうかを判定することができます。
If ActiveCell.HasArray = True Then
MsgBox "配列数式です!"
Else
MsgBox "配列数式ではありませんよ。"
End If
ActiveCellプロパティでアクティブなセルを表すRangeオブジェクトを取得して、そのHasArrayプロパティを調べています。
If文の、
If ActiveCell.HasArray = True Then
の部分は、特にプログラミグに慣れた方は、
If ActiveCell.HasArray Then
という書き方をすることが多いはずですが意味は同じです。
アクティブシートに配列数式が存在するかを判定するサンプルマクロ
以下のようなマクロで、アクティブなシートに配列数式が存在しているかどうかを調べることができます。
If Cells.HasArray = True Then
MsgBox "アクティブなシートに配列数式が存在します!"
Else
MsgBox "アクティブなシートに配列数式は存在していません。"
End If
Cellsプロパティに引数を指定しないことで、アクティブなシートの全セルを表すRangeオブジェクトを取得して、そのHasArrayプロパティを調べています。
アクティブブックに配列数式が存在するかを判定するサンプルマクロ
以下のようなマクロにすれば、アクティブなブックに配列数式が存在しているかどうかを調べられます。
Dim ws As Worksheet
Dim flg As Boolean
flg = False
For Each ws In Worksheets
If ws.Cells.HasArray = True Then
flg = True
Exit For
End If
Next ws
If flg = True Then
MsgBox "アクティブなブックに配列数式が存在します!"
Else
MsgBox "アクティブなブックに配列数式は存在していません。"
End If
配列数式があるかどうかを表す変数・flgをFalseにしておいてから、
flg = False
アクティブなブックの全ワークシートにFor Each~Nextループを回し、
For Each ws In Worksheets
各ワークシートのCelllsプロパティで全セルを表すRangeオブジェクトを取得してHasArrayプロパティを調べ、
If ws.Cells.HasArray = True Then
配列数式が含まれていたら、変数・flgの値を変更して、For Each~Next文を抜けます。
flg = True
Exit For
End If
その後、変数・flgの値に応じてメッセージを表示しています。
If flg = True Then
MsgBox "アクティブなブックに配列数式が存在します!"
Else
MsgBox "アクティブなブックに配列数式は存在していません。"
End If
最終更新日時:2019-10-19 07:26
- Newer:Google Apps Scriptで隣のセルを取得、選択、アクティブセルを隣に移動する
- Older:取り消し線を解除するWordマクロと、取り消し線が引かれている文字列を削除するWordマクロ
Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで配列数式かどうかを判定する-HasArray