4-1)オブジェクト式
4-1-1)オブジェクト式の書き方
VBA(Visual Basic for Applications)におけるオブジェクト式は、オブジェクト指向プログラミングの一部であり、Excelや他のOfficeアプリケーションの機能やデータにアクセス、操作するために使用されます。
オブジェクト式は、オブジェクトとそのプロパティ、メソッド、イベントを組み合わせて記述します。
VBAでのオブジェクトは、Excelのワークブック、ワークシート、セル、グラフ、範囲など、特定の要素を表すもので、それぞれが固有のプロパティ(属性)とメソッド(操作)を持っています。
プロパティとメソッド
プロパティ: オブジェクトの属性や状態を表します。読み取り専用または読み書き可能です。
メソッド : オブジェクトに対して実行できる操作やアクションです。
オブジェクト式の基本構造
オブジェクトとはVBAのデータ型のひとつです。
ブックやシート、フォントなど、複数の情報を持っている操作対象がオブジェクトと呼ばれます。
また、VBAではセルのことを「Rangeオブジェクト」と呼んでいます。
オブジェクト式は、オブジェクト名に続けてドット(.)を使用し、プロパティやメソッドを呼び出します。
オブジェクト.プロパティ
オブジェクト.メソッド
Range(“A1”).Value = 10
プロパティ
プロパティはオブジェクトの属性や特性を表します。
例えば、Excelのセルの値やフォントの色などです。
プロパティの例
'ワークシートの名前を変更する Dim ws As Worksheet Set ws =ThisWorkbook.Sheets("Sheet1") ws.Name = "NewName"
' セルA1の値を設定 Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ws.Range("A1").Value = "Hello, World!"
メソッド
メソッドはオブジェクトに対して実行できるアクションです。
例えば、ワークシートのコピーやグラフの作成などです。
メソッドの例
'セルの値をクリアする Dim rng As RangeSet rng = ThisWorkbook.Sheets("Sheet1").Range("A1:A10") rng.ClearContents
オブジェクト変数
オブジェクト変数を使用して、オブジェクトへの参照を保持し、コードをより読みやすく、効率的にすることができます。
オブジェクト変数の例
この例では、ws というオブジェクト変数を使用してシート1を参照し、セルA1とA2の値を設定していま
Dim ws As WorksheetSet ws = ThisWorkbook.Sheets("Sheet1") ws.Range("A1").Value = 10 ws.Range("A2").Value = 20
'シートを最後のシートの後ろにコピーする Dim ws As WorkSheet set ws = WorkSheet(1) ws.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
4-1-2)オブジェクトの階層
VBAのオブジェクトは階層構造になっており、上位のオブジェクトを通じて下位のオブジェクトにアクセスします。
例えば、Excelのアプリケーションオブジェクト>ワークブック>ワークシート>セル範囲へとアクセスします。
階層の例
例えば、Excelでは Application > Workbook > Worksheet > Range という階層があります。
Application.Workbooks(“Book1.xlsx”).WorkSheets(“Sheet1”).Range(“A1”).Value = 10
4-1-3)階層構造の特例
ブックとシートは省略可能
Range(“A1”).Value = 10
4-1-4)コレクション
コレクションとは、複数のオブジェクトを集めたものです。
コレクションは名前の後に複数形の「s」がついています。
ワークブックのオブジェクト名は「Workbook」ですが、コレクション名は「Workbooks”xxx.clsx”」となります。
セルのオブジェクト名は「Cell」ですが、コレクション名は「Cells(1,1)となります。
なお、例外としてVBAでセルを表すRangeは、範囲を示すためコレクションになっても複数形にはなりません。
Application.Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Value = 10
Application.Workbooks(1).Sheets("Sheet1").Range("A1").Value = 10
Application.Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Value = 10
Application.Workbooks(1).Sheets(1).Range("A1").Value = 10
4-1-5)セルの表し方
Rangeオブジェクトを使用する方法
単一セルを指定
Range("A1").Value = 10 ' セルA1の値を10に設定しています。 Cells(1, 1) → Cells(1, "A") ' A1セル Cells(2, 3) → Cells(2, "C") ' C2セル
セル範囲を指定
Range("A1") Range("A1:B2") Range("A1,B2") Range("A1:B2").Value = 20 'セルA1からB2の範囲全体の値を20に設定しています。
セル範囲の特定のセルにアクセス
Range("A1:B2").Cells(1, 1).Value = 30 ' A1セル
Range("A1:B2").Cells(2, 2).Value = 40 ' B2セル
Cellsプロパティを使用する方法
Cells(1, 1).Value = 50 ' A1セル
Cells(2, 3).Value = 60 ' C2セル
Cells(1, 1) → Cells(1, "A") ' A1セル
Cells(2, 3) → Cells(2, "C") ' C2セル
CellsとRangeの組み合わせ
Range(Cells(1, 1), Cells(3, 3)).Value = 70 ' A1からC3の範囲
名前付き範囲を指定
Named Rangeを使用する方法
Range("MyNamedRange").Value = 80
Offsetプロパティを使用する方法
Range("A1").Offset(1, 1).Value = 90 ' B2セル
CellsプロパティとOffsetプロパティの組み合わせ
Cells(1, 1).Offset(1, 1).Value = 100 ' B2セル
4-1-6)シートの指定
Worksheets(1)
Worksheets("sheet1")
4-1-6)ブックの指定方法
Workbooks("xxxxx.exlx")
4-1-7) Withステートメント
With ステートメントを使用すると、同じオブジェクトに対して複数の操作を行う場合にコードを簡略化できます。
Withステートメントの例
With ThisWorkbook.Sheets("Sheet1").Range("A1") .Value = 10 .Font.Bold = True .Interior.Color = RGB(255, 0, 0) End With