Home » ExcelVBA Rangeオブジェクト » セル数式 » 配列数式を解除して値を代入するExcelマクロ


配列数式を解除して値を代入するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

個人的に使うのはOKだけれど、引き継ぎなどを考えると使用を躊躇する機能や数式がExcelにはあります。

配列数式がその代表です。

複数のセルを使わなければ作れないような数式を、配列数式を使えば一つのセルで済んでしまうこともあり、Excelを使いこなしている人にとっては便利なのですが、ご存じない方には扱い辛いものです。

そんな配列数式に関連して、
「vba 配列数式を計算結果の値で置き換える」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

配列数式の扱いが面倒なので、配列数式を解除して値に置換する、VBA(Visual Basic for Applications)のコードを探している方による検索です。

配列数式を解除して値に置換してしまったあと、どうするのか気になるところですが、ここではとりあえずそんなExcelマクロをご紹介しておきます。

[スポンサードリンク]

配列数式を解除して値をセルに代入するサンプルマクロ

以下のマクロを実行すると、選択されているセル範囲の配列数式が解除され、値に置換されます。また、値に置換された元の配列数式と、そのセル番地がイミディエイトウィンドウに出力されます。


Sub 配列数式を解除して値に置換する()
 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

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル数式 » 配列数式を解除して値を代入するExcelマクロ

TrackBack:0

TrackBack URL

Home » ExcelVBA Rangeオブジェクト » セル数式 » 配列数式を解除して値を代入するExcelマクロ

「セル数式」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.