個人的に使うのはOKだけれど、引き継ぎなどを考えると使用を躊躇する機能や数式がExcelにはあります。
配列数式がその代表です。
複数のセルを使わなければ作れないような数式を、配列数式を使えば一つのセルで済んでしまうこともあり、Excelを使いこなしている人にとっては便利なのですが、ご存じない方には扱い辛いものです。
そんな配列数式に関連して、
「vba 配列数式を計算結果の値で置き換える」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
配列数式の扱いが面倒なので、配列数式を解除して値に置換する、VBA(Visual Basic for Applications)のコードを探している方による検索です。
配列数式を解除して値に置換してしまったあと、どうするのか気になるところですが、ここではとりあえずそんなExcelマクロをご紹介しておきます。
配列数式を解除して値をセルに代入するサンプルマクロ
以下のマクロを実行すると、選択されているセル範囲の配列数式が解除され、値に置換されます。また、値に置換された元の配列数式と、そのセル番地がイミディエイトウィンドウに出力されます。
Dim rng As Range For Each rng In Selection
If rng.HasArray Then
Debug.Print _
rng.Address(False, False) & vbTab & _
rng.FormulaArray
rng.Value = rng.Value
End If
Next rng
End Sub
サンプルマクロの解説
選択範囲の全セルに対してFor Each~Nextループを回して、
For Each rng In Selection
RangeオブジェクトのHasArrayプロパティで、Rangeオブジェクトが配列数式を含んでいるかどうかを判定して、
If rng.HasArray Then
セル番地と、数式をイミディエイトウィンドウに出力して、
Debug.Print _
rng.Address(False, False) & vbTab & _
rng.FormulaArray
値に置換しています。
rng.Value = rng.Value
- Newer:見出しの段落だけを残すWordマクロ
- Older:抽出に利用しているフィールド名を取得するExcelマクロ
Home » Excel VBA Rangeオブジェクト » セル数式 » 配列数式を解除して値を代入するExcelマクロ