GetCellProperty|セル範囲のプロパティを二次元配列で取得する
- yuji fukami
- 7月6日
- 読了時間: 3分
更新日:5 日前
この部品でできること
GetCellProperty は、セル範囲の各セルのプロパティを、取得したい種類を選んで二次元配列としてまとめて取得するExcel VBAの汎用プロシージャです。取得できるプロパティは次のとおりです。
値(Value)
数式(Formula)
R1C1形式の数式(FormulaR1C1)
フォント色(Font.Color)
塗り潰し色(Interior.Color)
表示値(Text)
表示塗潰色(条件付き書式の結果色 / DisplayFormat.Interior.Color)
取得する種類は列挙型 EnumCellProperty で指定します。1回の呼び出しで範囲全体をまとめて配列化できるので、セルの内容や書式を一括で読み取って処理したいときに便利です。
使いどころ
セル範囲の値や数式を、ループ処理の前に一括で配列に読み込んでおきたいとき
書式(色や表示値)を含めてセルの状態を取得し、比較・バックアップ・転記したいとき
条件付き書式で実際に表示されている色を取得したいとき
コード
宣言セクション(EnumCellProperty)はモジュールの先頭に配置してください。その下に本体を貼り付ければ動作します。
使い方・引数
引数に、取得対象のセル範囲と、取得したいプロパティの種類(列挙型)を渡して呼び出します。戻り値は1始まりの二次元配列です。
CellArea(Range):取得対象のセル範囲
Property(EnumCellProperty):取得するプロパティ(vbValue / vbFormula / vbFormulaR1C1 / vbFontColor / vbInteriorColor / vbText / vbDisplayFormatInteriorColor)
次は、B2:C3 に値・数式・塗り潰し色を設定し、値/数式/塗り潰し色をそれぞれ二次元配列で取得して、イミディエイトウィンドウに出力する呼び出し例です。
このテストを実行すると、イミディエイトウィンドウに次のような結果が出力されます(塗り潰し色は黄色 = 65535)。
(1,1) 値=100 / 数式=100 / 塗り色=65535
(1,2) 値=200 / 数式=200 / 塗り色=65535
(2,1) 値=200 / 数式==B2*2 / 塗り色=65535
(2,2) 値=400 / 数式==C2*2 / 塗り色=65535
依存プロシージャ
宣言セクション(Enum):EnumCellProperty(取得するプロパティの列挙型)を、必ずモジュールの先頭に配置してください(上のコードの宣言セクション部分)。これにより vbValue や vbInteriorColor のように分かりやすく取得対象を指定できます。
上記以外の自作プロシージャには依存せず、Excelの標準的なプロパティのみで動作します。
応用・注意点
戻り値は1始まりの二次元配列です。行・列とも UBound(配列, 1) / UBound(配列, 2) でループできます。
vbValue(値)は生の値、vbText(表示値)は書式適用後の表示文字列を返します。日付や桁区切りなど、見た目のとおりの文字列がほしい場合は vbText を使います。
vbInteriorColor は設定された塗り潰し色、vbDisplayFormatInteriorColor は条件付き書式で実際に表示されている色を返します。条件付き書式の結果色を取得したいときは後者を使います。
値・数式・R1C1数式は範囲プロパティで一括取得できますが、1セルだけの範囲では二次元配列ではなくスカラー値が返る点に注意してください(Excelの仕様)。複数セルの範囲で使うのが基本です。
まとめ
GetCellProperty を使えば、セル範囲の値や書式を、取得したい種類を選んで二次元配列でまとめて取得できます。セルの内容を一括で読み取って処理・比較・転記したいときの基本部品として便利です。

