ExcelVBAで開発を進めていると、
「このオブジェクトにはどんなプロパティがあるんだろう?」
「特定のオブジェクトの中身を一覧で確認したい」
と感じたことはありませんか?
プロパティ(Property)は、オブジェクトの状態や属性を表す要素です。
VBAではセル・シート・ブックなど、すべてがオブジェクトとして扱われ、それぞれに固有のプロパティが備わっています。
この記事では、VBAでプロパティの一覧を取得・確認する方法を、基本操作から実務応用までわかりやすく紹介します。
初心者がつまずきやすい「型の違い」や「エラーが出るプロパティの扱い方」についても詳しく解説します。
目次
- ✅ プロパティとは?一覧を取得する前に基本を整理
- ✅ プロパティ一覧を取得する3つの方法
- 【方法1】オブジェクトブラウザ(F2キー)で確認する
- 【方法2】IntelliSense(入力補完機能)で確認する
- 【方法3】VBAコードでプロパティ一覧と値を取得する
- ✅ プロパティ一覧をVBAで自動取得するコード例
- サンプルコード①:Rangeオブジェクトのプロパティ一覧を出力
- ✅ サンプルコード②:WorkbookやWorksheetのプロパティ一覧取得
- ✅ 実務応用①:指定シートのプロパティを自動取得してドキュメント化
- ✅ 実務応用②:セルの書式やフォント情報を一覧取得
- ✅ プロパティ一覧取得で注意すべきポイント
- 1. すべてのプロパティが取得できるわけではない
- 2. オブジェクト型のプロパティは値ではなく参照が返る
- 3. ループ回数が多い場合は速度対策が必要
- ✅ 開発効率を上げる補助ツール的使い方
- ■ まとめ:プロパティ一覧取得でVBAの理解が深まる
✅ プロパティとは?一覧を取得する前に基本を整理
まずは、プロパティの意味を簡単に振り返っておきましょう。
VBAで言う「プロパティ」とは、オブジェクト(Excelの要素)が持つ状態・情報を表すものです。
例:
Range("A1").Value = "テスト"
MsgBox Range("A1").Address
ここで「Value」や「Address」はセル(Rangeオブジェクト)のプロパティです。
Value
:セルの値Address
:セルのアドレス
これらはExcel操作の基本ですが、Rangeだけでも数百種類のプロパティが存在します。
そのため、手作業で全部を調べるのは非効率。
VBAで一覧取得して、どんなプロパティが存在するかを確認するのが便利です。
参考:【VBA】メソッド一覧と使い方|初心者でも理解できる動作命令の全知識
✅ プロパティ一覧を取得する3つの方法
VBAでプロパティ一覧を確認する方法はいくつかあります。
それぞれの特徴と使い分けを理解しておくと、開発効率が格段に上がります。
【方法1】オブジェクトブラウザ(F2キー)で確認する
最も手軽な方法は、VBE(Visual Basic Editor)のオブジェクトブラウザを使うことです。
手順:
- Excelで「Alt + F11」を押してVBEを開く
- 「F2」キーを押して「オブジェクトブラウザ」を開く
- 検索欄に「Range」など調べたいオブジェクト名を入力
右側に「プロパティ」「メソッド」「イベント」が一覧表示されます。
プロパティの一覧を目視で確認でき、どんな情報を持っているかがひと目で分かります。
ただし、この方法では実際の値は取得できません。
【方法2】IntelliSense(入力補完機能)で確認する
コード入力時に「.(ドット)」を入力すると、
そのオブジェクトで使えるプロパティ・メソッド一覧が自動的に表示されます。
例:
Range("A1").
この状態で表示されるリストに、
「Value」「Font」「Interior」「Address」などが並びます。
特徴:
- 実際にコードで使えるプロパティを確認できる
- 型宣言をしていない場合は候補が出ない(例:
Dim r As Range
が必要) - 候補リストを確認するだけなら、エラーの心配がない
開発中の確認には最も便利な方法です。
【方法3】VBAコードでプロパティ一覧と値を取得する
実際のオブジェクトのプロパティ名とその値を一覧で出力するには、VBAコードを使います。
ここでは、TypeName
やCallByName
を使った手法を紹介します。
✅ プロパティ一覧をVBAで自動取得するコード例
次のサンプルでは、Rangeオブジェクトのプロパティ名と値を出力します。
サンプルコード①:Rangeオブジェクトのプロパティ一覧を出力
Sub ShowRangeProperties()
Dim obj As Object
Dim prop As Variant
Dim ws As Worksheet
Dim i As Long
' 出力用シートを用意
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "PropertyList"
' 対象セル
Set obj = Range("A1")
i = 1
On Error Resume Next
' プロパティ一覧を取得(代表的なプロパティ名)
For Each prop In Array("Address", "Row", "Column", "Value", "Text", "Font", "Interior", "Formula", "NumberFormat")
ws.Cells(i, 1).Value = prop
ws.Cells(i, 2).Value = CallByName(obj, prop, VbGet)
i = i + 1
Next prop
On Error GoTo 0
ws.Columns("A:B").AutoFit
MsgBox "プロパティ一覧をシートに出力しました。"
End Sub
出力結果(例):
プロパティ名 | 値 |
---|---|
Address | $A$1 |
Row | 1 |
Column | 1 |
Value | テスト |
Text | テスト |
Font | [Object] |
Interior | [Object] |
Formula | |
NumberFormat | General |
ポイント:
CallByName
関数でオブジェクトのプロパティを動的に呼び出せます。- エラーを避けるために
On Error Resume Next
で囲うのが安全。 Font
やInterior
のようなサブオブジェクト型は「[Object]」と表示されます。
✅ サンプルコード②:WorkbookやWorksheetのプロパティ一覧取得
Workbook
やWorksheet
のような上位オブジェクトも同様に確認できます。
Sub ShowWorkbookProperties()
Dim wb As Workbook
Dim ws As Worksheet
Dim prop As Variant
Dim i As Long
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "BookProperties"
Set wb = ThisWorkbook
i = 1
On Error Resume Next
For Each prop In Array("Name", "Path", "FullName", "Saved", "ReadOnly", "Sheets", "HasVBProject", "ProtectStructure")
ws.Cells(i, 1).Value = prop
ws.Cells(i, 2).Value = CallByName(wb, prop, VbGet)
i = i + 1
Next prop
On Error GoTo 0
ws.Columns("A:B").AutoFit
MsgBox "Workbookのプロパティ一覧を出力しました。"
End Sub
出力結果(例):
プロパティ名 | 値 |
---|---|
Name | Book1.xlsm |
Path | C:\Users\Excel\ |
FullName | C:\Users\Excel\Book1.xlsm |
Saved | True |
ReadOnly | False |
HasVBProject | True |
ProtectStructure | False |
このように、Workbook
オブジェクトでも主要な情報を一覧で確認できます。
特にブック管理マクロを作るときに役立ちます。
参考:【VBA】ファイルを選択して開く方法|Application.GetOpenFilenameとWorkbooks.Openの実践例
✅ 実務応用①:指定シートのプロパティを自動取得してドキュメント化
企業やチーム開発では、シート構成や設定情報を一覧化しておきたいケースがあります。
以下のサンプルでは、すべてのシートのプロパティ(名前・保護状態・可視性など)を一括取得します。
Sub GetSheetProperties()
Dim ws As Worksheet
Dim info As Worksheet
Dim i As Long
Set info = ThisWorkbook.Sheets.Add
info.Name = "SheetInfo"
info.Range("A1:D1").Value = Array("シート名", "可視性", "保護状態", "インデックス")
i = 2
For Each ws In ThisWorkbook.Worksheets
info.Cells(i, 1).Value = ws.Name
Select Case ws.Visible
Case xlSheetVisible: info.Cells(i, 2).Value = "表示"
Case xlSheetHidden: info.Cells(i, 2).Value = "非表示"
Case xlSheetVeryHidden: info.Cells(i, 2).Value = "完全非表示"
End Select
info.Cells(i, 3).Value = ws.ProtectContents
info.Cells(i, 4).Value = ws.Index
i = i + 1
Next ws
info.Columns("A:D").AutoFit
MsgBox "シートのプロパティ一覧を出力しました。"
End Sub
出力結果:
シート名 | 可視性 | 保護状態 | インデックス |
---|---|---|---|
Sheet1 | 表示 | False | 1 |
Sheet2 | 非表示 | True | 2 |
このように「どのシートが非表示になっているか」「保護されているか」を即座に一覧化できます。
開発者や運用担当者にとって非常に便利な自動ドキュメント生成マクロです。
✅ 実務応用②:セルの書式やフォント情報を一覧取得
特定の範囲内で、文字色・背景色・フォントサイズなどを一括で確認したい場合もあります。
Sub GetFormatProperties()
Dim ws As Worksheet
Dim rng As Range
Dim c As Range
Dim i As Long
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "FormatInfo"
ws.Range("A1:E1").Value = Array("セル", "値", "文字色", "背景色", "フォントサイズ")
i = 2
For Each c In Range("A1:A10")
ws.Cells(i, 1).Value = c.Address
ws.Cells(i, 2).Value = c.Value
ws.Cells(i, 3).Value = c.Font.Color
ws.Cells(i, 4).Value = c.Interior.Color
ws.Cells(i, 5).Value = c.Font.Size
i = i + 1
Next c
ws.Columns("A:E").AutoFit
MsgBox "書式プロパティを一覧出力しました。"
End Sub
このコードは、セルの見た目を数値(色コードなど)として一覧化します。
デザインチェックや帳票整形時の品質確認にも有効です。
✅ プロパティ一覧取得で注意すべきポイント
プロパティの一覧を自動取得する際は、いくつかの注意点があります。
1. すべてのプロパティが取得できるわけではない
一部のプロパティは「取得専用」「設定専用」「内部専用」となっており、
CallByName
で参照しようとするとエラーになります。
→ On Error Resume Next
でスキップ処理を入れておくのが安全です。
2. オブジェクト型のプロパティは値ではなく参照が返る
Font
やInterior
などはオブジェクト(サブ階層)を返すため、
そのままでは値を取得できません。
必要に応じて .Color
や .Name
など下位プロパティを指定します。
参考:【VBA】Range型とは?セル操作の基本を理解して自在に扱う方法
3. ループ回数が多い場合は速度対策が必要
大量のプロパティを取得すると、Excelの画面更新で処理が遅くなります。
次のコードを冒頭に入れると高速化できます。
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
処理後にTrue
やxlAutomatic
へ戻すことを忘れずに。
✅ 開発効率を上げる補助ツール的使い方
プロパティ一覧取得マクロは、開発現場でデバッグや調査ツールとしても利用価値が高いです。
- 不具合のあるオブジェクトの「状態」を一覧化して原因特定
- シートやセルの「表示形式」「保護状態」を一括確認
- テンプレートの「初期設定ドキュメント」を自動生成
開発チーム内で共有することで、属人的なトラブル対応を防ぐこともできます。
■ まとめ:プロパティ一覧取得でVBAの理解が深まる
- プロパティとは、オブジェクトの状態や属性を表すもの
- 一覧取得には「オブジェクトブラウザ」「IntelliSense」「VBAコード出力」がある
CallByName
を使うと、任意のプロパティを動的に取得できるWorkbook
・Worksheet
・Range
など主要オブジェクトのプロパティを自動出力できる- 実務では、保護状態・書式・レポート設定などをドキュメント化するのに有効
プロパティ一覧を取得できるようになると、VBAの「オブジェクト構造」が明確に見えるようになります。
これは、単なるマクロ作成から一歩進んだ“開発者的視点”への第一歩です。
ぜひこの記事のコードを活用して、Excel内部の仕組みを「見える化」する開発スタイルを取り入れてみてください。