VBAでセルやワークシート、ブックを操作していると、Value、Name、Count、Visibleなど、さまざまな記述が登場します。
これらの多くは「プロパティ」と呼ばれるもので、VBAでオブジェクトの状態を調べたり、設定を変更したりするときに使用します。
たとえば、セルの値を取得する場合はRangeオブジェクトのValueプロパティを利用し、シート名を変更する場合はWorksheetオブジェクトのNameプロパティを利用します。
ただし、「プロパティ=設定を変更するもの」とだけ覚えてしまうと、値を取得するだけのプロパティや、別のオブジェクトを返すプロパティが登場したときに混乱しやすくなります。
また、同じ名前のプロパティでも、どのオブジェクトに対して使用しているのかを意識することが重要です。
この記事では、VBAにおけるオブジェクトとプロパティの関係から、プロパティの取得・設定方法、Workbook・Worksheet・Rangeでよく使用する代表例まで順番に解説します。
✅ VBAのオブジェクトで使うプロパティとは?
VBAのプロパティを理解するとき、「ValueやNameなどを覚えればよい」と考えてしまうことがあります。しかし、プロパティ名だけを暗記しても、対象となるオブジェクトとの関係が分からなければ実務では応用しにくくなります。
さらに、プロパティには値を取得できるもの、設定を変更できるもの、別のオブジェクトを返すものなどがあります。この違いを理解していないと、代入できると思ってコードを書いたのにエラーになる、といった問題につながります。特にWorkbook、Worksheet、Rangeを組み合わせる処理では、「どのオブジェクトのプロパティなのか」を意識することが重要です。まずは、オブジェクトとプロパティの基本的な関係から整理していきましょう。
・プロパティはオブジェクトの情報や状態を表す
VBAでは、Workbook、Worksheet、Rangeなどのオブジェクトに対して、それぞれさまざまなプロパティが用意されています。
たとえば、RangeオブジェクトのValueプロパティを使用すると、セルの値を取得できます。
Dim cellValue As Variant
' A1セルの値を取得する
cellValue = ThisWorkbook.Worksheets("売上").Range("A1").Valueこのコードでは、
Range("A1")
がセルを表すRangeオブジェクト、
.Value
がその値を表すプロパティです。
一方、WorksheetオブジェクトではNameプロパティを利用できます。
Dim sheetName As String
' ワークシート名を取得する
sheetName = ThisWorkbook.Worksheets(1).Nameこの場合は、
Worksheets(1)
がWorksheetオブジェクト、
.Name
がワークシート名を表すプロパティです。
このように、
オブジェクト.プロパティ
という関係を意識すると、VBAのコードを読み解きやすくなります。
・プロパティとメソッドの違いを整理する
プロパティと混同しやすいものに「メソッド」があります。
プロパティは、基本的にオブジェクトが持っている情報や状態などを表します。
たとえば、
Range("A1").Valueならセルの値、
Worksheet.Nameならワークシートの名前です。
一方、メソッドはオブジェクトに対して何らかの処理を実行するときに使用します。
たとえば、
ThisWorkbook.Worksheets("売上").Range("A1:C10").ClearContentsでは、ClearContentsによってセル範囲の内容を削除しています。
また、
ThisWorkbook.Worksheets("売上").Copyなら、Worksheetオブジェクトに対してCopyメソッドを実行しています。
単純化すると、
- プロパティ:オブジェクトの情報や状態などを扱う
- メソッド:オブジェクトに対して処理を実行する
と考えると分かりやすいでしょう。
ただし、実際のVBAではプロパティが別のオブジェクトを返すこともあります。
そのため「プロパティ=値」とだけ覚えるのではなく、オブジェクトに用意された情報や参照へアクセスするための仕組みとして理解しておくと応用しやすくなります。
プロパティとメソッドの違いを理解したうえで、各オブジェクトで利用できる機能を確認したい場合は「【VBA】オブジェクトブラウザの基本的な使用方法|プロパティとメソッドを正しく理解する」も参考にしてください。
✅ VBAでオブジェクトのプロパティを取得・設定する方法
プロパティには、値を確認する使い方と、設定を書き換える使い方があります。この2つを区別せずに覚えると、「右辺に書くものなのか、左辺に書けるものなのか」が分からなくなりやすいです。
また、すべてのプロパティを自由に変更できるわけではありません。取得だけが可能なプロパティも存在するため、どのプロパティでも同じ使い方ができると考えるのは注意が必要です。実務では、現在の状態を取得して条件判定に利用する処理と、プロパティを変更してExcelの状態を制御する処理の両方を頻繁に使用します。ここでは、まず基本となる「取得」と「設定」の違いを確認しましょう。
・プロパティの値を取得する基本的な書き方
プロパティの情報を取得する場合は、対象となるオブジェクトに続けてプロパティを指定します。
たとえば、ワークシート名を取得する場合は次のように記述できます。
Dim targetSheet As Worksheet
Dim currentSheetName As String
' 操作対象となるシートを設定する
Set targetSheet = ThisWorkbook.Worksheets(1)
' Nameプロパティから現在のシート名を取得する
currentSheetName = targetSheet.Name
MsgBox currentSheetName処理の流れは次のとおりです。
targetSheetをWorksheet型で宣言する- 対象となるワークシートへの参照を設定する
- Nameプロパティからシート名を取得する
- 取得した値を
currentSheetNameへ格納する
オブジェクト変数を使用しているため、
targetSheet.Nameを見るだけで、「対象シートのNameプロパティを参照している」と判断できます。
実務ではプロパティを直接参照するだけでなく、取得した値を変数へ格納して条件判定や後続処理で使用することもあります。
・プロパティを変更してオブジェクトの状態を設定する
プロパティによっては、値を取得するだけでなく変更することもできます。
たとえば、WorksheetのNameプロパティを変更するとシート名を変更できます。
Dim targetSheet As Worksheet
' 名前を変更するシートを明確にする
Set targetSheet = ThisWorkbook.Worksheets("Sheet1")
' Nameプロパティへ新しい名前を設定する
targetSheet.Name = "売上"このコードでは、Nameプロパティへ文字列を設定しています。
同様に、RangeオブジェクトのValueプロパティを変更すれば、セルへ値を書き込めます。
Dim targetCell As Range
' 値を書き込むセルを設定する
Set targetCell = ThisWorkbook.Worksheets("売上").Range("A1")
' Valueプロパティへ値を設定する
targetCell.Value = "商品名"このように同じプロパティでも、
cellValue = targetCell.Valueなら値の取得、
targetCell.Value = "商品名"なら値の設定になります。
「プロパティを使う」という言葉だけでは両者の違いが分かりにくいため、コードを見るときは取得しているのか、設定しているのかを確認することが重要です。
・すべてのプロパティを変更できるわけではない
ここで注意したいのが、すべてのプロパティに自由に値を設定できるわけではないことです。
プロパティには、取得と設定の両方ができるものだけでなく、情報を取得するために使用するものもあります。
たとえば、WorksheetsコレクションのCountプロパティを利用すると、ワークシート数を取得できます。
Dim sheetCount As Long
' ブック内のワークシート数を取得する
sheetCount = ThisWorkbook.Worksheets.CountCountは現在のワークシート数を確認するために利用できます。
「プロパティなのだから左辺に書いて変更できる」と考えるのではなく、そのプロパティがどのような用途で提供されているのかを確認することが大切です。
✅ VBAでよく使うWorkbook・Worksheetの代表的なプロパティ
VBAには非常に多くのプロパティが存在するため、最初からすべてを覚える必要はありません。むしろ一覧を丸暗記しようとすると、「どのオブジェクトで使えるプロパティなのか」が曖昧になりやすくなります。
実務では、操作するオブジェクトごとに代表的なプロパティを押さえ、必要になったものを調べながら広げていくほうが効率的です。また、似た名前のプロパティでも対象となるオブジェクトによって意味が異なる場合があります。まずは使用頻度の高いWorkbookとWorksheetから整理すると、Excel VBAのコード全体を理解しやすくなります。ここでは一覧を網羅するのではなく、基本を理解するための代表例に絞って紹介します。
・Workbookオブジェクトでよく使うプロパティ
WorkbookはExcelブックを表すオブジェクトです。
代表的なプロパティとして、NameやPathなどがあります。
| プロパティ | 主な用途 |
|---|---|
| Name | ブック名を取得する |
| Path | ブックが保存されているフォルダを取得する |
| FullName | パスを含むブック名を取得する |
| Worksheets | ブック内のワークシートを参照する |
たとえば、現在のVBAコードが保存されているブックのパスを取得する場合は、次のように記述できます。
Dim targetBook As Workbook
Dim bookPath As String
Set targetBook = ThisWorkbook
' 対象ブックの保存先を取得する
bookPath = targetBook.Path実務ではファイル保存や別ファイルの読み込みなどで、PathやFullNameを利用する機会があります。
ただし、ブックがまだ保存されていない場合など、状態によって取得結果を考慮する必要があるケースもあります。
プロパティ名だけを覚えるのではなく、「どのような状態で使用するのか」まで意識すると安全です。
・Worksheetオブジェクトでよく使うプロパティ
Worksheetでは、NameやVisibleなどが代表的です。
| プロパティ | 主な用途 |
|---|---|
| Name | シート名の取得・設定 |
| Visible | シートの表示状態を取得・設定 |
| Range | 指定したセル範囲を参照 |
| Cells | 行番号・列番号からセルを参照 |
| Rows | 行を参照 |
| Columns | 列を参照 |
たとえば、シートを非表示にする場合はVisibleプロパティを変更します。
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Worksheets("設定")
' 設定シートを非表示にする
targetSheet.Visible = xlSheetHiddenこのようにプロパティを変更することで、対象となるオブジェクトの状態を制御できます。
一方、RangeやCellsは単純な文字列や数値ではなく、その先のセルを表すRangeオブジェクトへつながります。
targetSheet.Range("A1").Value = "商品名"このコードでは、
Worksheet → Range → Value
というように、オブジェクトとプロパティをたどりながら最終的な値へアクセスしています。
この関係を理解すると、長いVBAコードでも「今どのオブジェクトを操作しているのか」を追いやすくなります。
・Rangeオブジェクトでよく使うプロパティ
Excel VBAでは、セルを操作するためにRangeオブジェクトを頻繁に使用します。
Rangeには非常に多くのプロパティがありますが、まずは実務で使用する機会の多いものから理解していくとよいでしょう。
| プロパティ | 主な用途 |
|---|---|
| Value | セルの値を取得・設定する |
| Formula | セルの数式を取得・設定する |
| Address | セルやセル範囲のアドレスを取得する |
| Row | セルの行番号を取得する |
| Column | セルの列番号を取得する |
| Interior | セルの背景に関するオブジェクトを参照する |
| Font | セルのフォントに関するオブジェクトを参照する |
たとえば、セルの値とアドレスを取得する場合は次のように記述できます。
Dim targetCell As Range
Dim cellValue As Variant
Dim cellAddress As String
'確認するセルを明確に指定する
Set targetCell = ThisWorkbook.Worksheets("売上").Range("B2")
'セルの値とアドレスをそれぞれ取得する
cellValue = targetCell.Value
cellAddress = targetCell.AddressValueとAddressはどちらもRangeで使用できますが、役割は異なります。
Valueではセルに格納されている値を扱い、AddressではそのRangeがどのセルを表しているのかを確認できます。
このように「Rangeにはどのプロパティがあるか」だけでなく、取得した情報を何に利用するのかまで考えることが大切です。
ValueやFormula、Addressなど、Rangeで使用するプロパティをさらに詳しく確認したい場合は「【VBA】Rangeオブジェクトの主要プロパティを徹底解説|セル操作の基本をマスターしよう」でまとめて解説しています。
✅ VBAではプロパティから別のオブジェクトを参照できる
プロパティを「文字列や数値を取得するもの」とだけ覚えていると、VBAコードが複雑になったときにつまずきやすくなります。実際には、プロパティを通して別のオブジェクトを参照するケースもあります。RangeやWorksheetsなどを使ったコードが長く見えるのは、オブジェクトから別のオブジェクトへ順番にたどっていることが理由の一つです。この仕組みを理解していないと、どこまでがオブジェクトで、どこからが値なのか分からなくなりやすいでしょう。
また、オブジェクトを返すものを変数へ保持するときには、通常の値とは扱い方が異なります。VBAのコードを読み解く力を付けるためにも、この関係を理解しておくことが重要です。
・プロパティをたどって目的のオブジェクトへアクセスする
次のコードを見てみましょう。
ThisWorkbook.Worksheets("売上").Range("A1").Value = "商品名"一見すると長いコードですが、左側から関係を追っていくと理解しやすくなります。
ThisWorkbookでVBAコードを保存しているブックを基準にするWorksheets("売上")で対象のワークシートを参照するRange("A1")で対象セルを参照するValueでセルの値を操作する
つまり、いきなりValueへアクセスしているわけではありません。
ブック → ワークシート → セル → 値
という階層をたどっています。
この考え方が分かると、
ThisWorkbook.Worksheets("売上").Range("A1").Font.Bold = Trueのようなコードも読み解きやすくなります。
この場合は、A1セルからFontオブジェクトへ進み、そのBoldプロパティをTrueに設定しています。
WorkbookやWorksheet、Rangeなど、VBAで扱う代表的なオブジェクト同士の関係を整理したい場合は「【VBA】オブジェクト一覧と活用方法」も参考になります。
・オブジェクトを返す場合は変数として保持できる
プロパティなどから取得したオブジェクトは、オブジェクト変数へ保持して利用することもできます。
たとえば、RangeのFontから取得できるFontオブジェクトを変数へ設定する場合は、次のように記述できます。
Dim targetCell As Range
Dim targetFont As Font
'操作対象となるセルを設定する
Set targetCell = ThisWorkbook.Worksheets("売上").Range("A1")
'セルに関連するFontオブジェクトを取得する
Set targetFont = targetCell.Font
'フォントに関する設定をまとめて変更する
targetFont.Bold = True
targetFont.Size = 12この書き方では、セルそのものとフォント設定を担当するオブジェクトを分けています。
ただし、数行しか使用しない処理まで細かくオブジェクト変数へ分ければよいわけではありません。
targetCell.Font.Bold = Trueのように直接指定したほうが分かりやすいケースもあります。
セルの背景色については、Rangeから参照できるInteriorオブジェクトを使用します。背景色の指定方法を詳しく知りたい場合は「【VBA】背景色の一覧と設定方法:Interiorオブジェクトの使用方法」も参考にしてください。
実務では、同じオブジェクトを繰り返し操作するのか、変数に分けることで処理の意図が明確になるのかを基準に判断するとよいでしょう。
プロパティなどから取得したオブジェクトを変数へ保持する仕組みについては「【VBA】オブジェクト変数とは?宣言・Setの使い方と参照の仕組みを解説」で詳しく解説しています。
✅ VBAでプロパティを使うときに注意したいポイント
プロパティ名が正しくても、対象となるオブジェクトが違えば期待した処理にならないことがあります。また、ExcelではActiveSheetやSelectionなど現在選択されている状態を基準にしたコードも書けるため、動作確認では成功しても実際の運用で別のシートを操作してしまうことがあります。さらに、同じプロパティでも取得専用なのか設定できるのかによって使い方が異なります。
実務では「プロパティ名を知っている」ことより、「どのオブジェクトの何を操作しているか」を把握することが重要です。コードが長くなるほど、この基準が曖昧だと修正時の確認範囲も広がります。プロパティを安全に利用するために、いくつかのポイントを押さえておきましょう。
・プロパティの対象となるオブジェクトを明確にする
たとえば、次のコードでもA1セルへ値を設定できます。
Range("A1").Value = "商品名"しかし、このコードだけではどのワークシートのA1セルなのかが明確ではありません。
アクティブになっているシートによって対象が変化する可能性があります。
業務で使用するマクロでは、次のように対象シートを明示するほうが安全です。
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Worksheets("売上")
targetSheet.Range("A1").Value = "商品名"これなら、ユーザーが別のワークシートを表示していたとしても、「売上」シートを対象として処理できます。
プロパティを正しく使うだけでなく、そのプロパティをどのオブジェクトに対して使用しているのかを明確にすることが、安定したコードにつながります。
・プロパティの型を意識して扱う
プロパティによって返されるデータの種類は異なります。
たとえば、WorksheetのNameなら文字列として扱えます。
Dim sheetName As String
sheetName = ThisWorkbook.Worksheets(1).Name一方、RangeのValueはセルの内容によって数値、文字列、日付などさまざまな値を扱う可能性があります。
そのため、処理内容によってはVariant型で受け取る方法もあります。
Dim cellValue As Variant
cellValue = ThisWorkbook.Worksheets("売上").Range("A1").Valueまた、FontやInteriorなどのように、さらにオブジェクトへつながるものもあります。
すべてのプロパティを「値が返ってくるもの」と同じ感覚で扱わず、何が返されるのかを意識することが重要です。
オブジェクトを変数として扱う際のObject型の特徴や、Worksheet・Rangeなど具体的な型との違いについては「【VBA】オブジェクト型(Object 型)とは?使い方と注意点」で詳しく解説しています。
✅ VBAのプロパティが分からないときの調べ方
VBAには多数のオブジェクトとプロパティがあるため、すべてを暗記しようとする必要はありません。実務でも、使用頻度の低いプロパティまで記憶だけで書くことは現実的ではありません。むしろ重要なのは、操作したい内容から適切なオブジェクトとプロパティを調べられることです。
ただし、似た名前だけを頼りにコードを変更すると、対象オブジェクトや返される型を誤解することがあります。特に初めて使うプロパティでは、入力候補やオブジェクトブラウザなどを利用して関係を確認すると理解しやすくなります。プロパティを「覚える」だけでなく「調べられる」状態にしておくことも、VBAを継続して扱ううえで重要です。
・入力候補から利用できるプロパティを確認する
具体的な型でオブジェクト変数を宣言すると、VBEでコードを記述するときに入力候補を確認しやすくなります。
たとえば、
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Worksheets("売上")
targetSheet.のように記述すると、Worksheetで利用できるプロパティやメソッドの候補を確認できます。
そのため、
Dim targetObject As Objectと何でもObject型で宣言するのではなく、扱う対象が明確な場合は、
Dim targetSheet As Worksheetのように具体的な型を使用することが、コードの作成や保守のしやすさにもつながります。
・一覧を暗記するよりオブジェクトとの関係を理解する
プロパティを学ぶときは、一覧を上から順番に覚えるよりも、
何を操作したいか → 対象はどのオブジェクトか → どのプロパティを利用するか
という順番で考えると実務へ応用しやすくなります。
たとえば、
「シート名を変更したい」
のであれば、
Worksheet → Name
「セルへ値を設定したい」
のであれば、
Range → Value
「セルのフォントを太字にしたい」
のであれば、
Range → Font → Bold
というように整理できます。
この関係が分かれば、初めて見るプロパティが登場しても、「どのオブジェクトに属しているのか」を確認しながらコードを読み進められます。
オブジェクトが持つプロパティをまとめて確認したい場合は「【VBA】プロパティ一覧を取得する方法|オブジェクトの中身を一括確認する完全ガイド」で、一覧として確認する方法を詳しく解説しています。
✅ まとめ:VBAのオブジェクトとプロパティの関係を理解して使い分けよう
VBAには数多くのプロパティがあるため、一覧をすべて暗記することが重要だと思われがちです。しかし実務では、プロパティ名そのものよりも「どのオブジェクトに対して、何のために使用するのか」を理解することが重要です。
また、プロパティには値を取得・設定するものだけでなく、別のオブジェクトを参照するために使われるものもあります。この関係を理解すると、Workbook、Worksheet、Rangeなどが連続するコードも読み解きやすくなります。さらに、対象となるオブジェクトを明示することで、ActiveSheetなどに依存した誤操作も防ぎやすくなります。まずは使用頻度の高いプロパティから実際のコードで確認し、必要に応じて調べながら知識を広げていきましょう。
- プロパティはオブジェクトの情報や状態、関連するオブジェクトなどを扱う
- 基本的には「オブジェクト.プロパティ」の関係で考える
- ValueやNameなど、取得と設定の両方に利用できるプロパティがある
- Countのように情報の取得を目的として利用するプロパティもある
- RangeではValue、Formula、Address、Row、Columnなどをよく使用する
- FontやInteriorなど、別のオブジェクトへつながるものもある
- プロパティを使用するときは対象となるWorkbookやWorksheetを明確にする
- すべてを暗記するのではなく、対象オブジェクトから必要なプロパティを調べる
VBAのコードを読むときに「プロパティ名」だけを見るのではなく、その左側にあるオブジェクトまでセットで確認する習慣を付けてみてください。
オブジェクトとプロパティのつながりが分かるようになると、初めて見るコードでも処理の流れを追いやすくなり、自分でセル・シート・ブックを操作するコードを組み立てる力にもつながります。