目次
COMオブジェクトとは、Microsoftが開発したComponent Object Model(COM)と呼ばれる技術を使用して作成されたオブジェクトのことを指します。COMオブジェクトは、Windowsプラットフォームで動作し、他のアプリケーションやプログラムから利用することができます。
UWSCでは以下のように記述することで呼び出して利用することができるようになります。
Object = CREATEOLEOBJ( COMオブジェクト名 )
- InternetExplorer オブジェクト
- Webブラウザ、Internet Explorerの機能をプログラムから制御するために使用されるオブジェクトです。Webページのロード、操作、フレームのナビゲーション、フォームの入力、テキストの検索など、様々なWebページ操作をプログラムから自動的に実行することができます。
- Shell オブジェクト
- Windowsシェルの機能をプログラムから制御するために使用されるオブジェクトです。Shellオブジェクトを使用することで、ファイルのコピー、削除、移動、作成、名前の変更、フォルダの操作など、Windows上での様々なファイル操作をプログラムから自動的に実行することができます。
- CDO オブジェクト
- Microsoft Exchange ServerとMicrosoft Outlookとの間でメールや予定表などの情報を共有するために使用されるオブジェクトです。CDOオブジェクトを使用することで、メールの送受信、予定表の操作、タスクの管理、連絡先の管理など、Exchange ServerおよびOutlookの機能をプログラムから制御することができます。
- FileSystemObject オブジェクト
- ファイルやフォルダを操作するためのオブジェクトです。FileSystemObjectオブジェクトは、ファイル操作に必要な機能を提供するため、ファイルの読み取りや書き込み、フォルダの作成や削除、ファイルの属性の取得や設定などの操作が可能です。
- WshShell オブジェクト
- WshShellオブジェクトは、Windows Script Host(WSH)環境で使用することができるオブジェクトの一つで、Windowsのシェルを制御するための機能を提供します。WshShellオブジェクトは、ファイル・コマンドプロンプトによるコマンド・レジストリの操作などを行うことができます。
- Excel オブジェクト
- Excelオブジェクトは、Excelアプリケーション内のさまざまなオブジェクト(ブック、シート、セルなど)にアクセスするための手段を提供します。
- Word オブジェクト
- Wordオブジェクトは、Wordアプリケーション内のさまざまなオブジェクト(ドキュメント、節、段落、文字列など)にアクセスするための手段を提供します。
- Outlook オブジェクト
- Outlookオブジェクトは、Outlookアプリケーション内のさまざまなオブジェクト(メール、タスク、スケジュールなど)にアクセスするための手段を提供します。
- Selenium オブジェクト
- Seleniumは、Webドライバーと呼ばれるブラウザ専用のコンポーネントを使用して、Webページを開き、要素をクリックしたり、テキストを入力したり、ページの内容を取得したりすることができます。WebDriverを介してChrome、Edge、Firefox、Internet Explorerなどの主要ブラウザを操作することができます。
- RegExp オブジェクト
- RegExpオブジェクトは正規表現を扱うためのオブジェクトです。正規表現は、特定のパターンに一致する文字列を検索、抽出、置換するために使用されます。
用語説明
以下の項目はExcelで解説していますが、基本的には他も同じです。
オブジェクト
オブジェクトとは、操作を指示するときの操作対象のことをいいます。Excelの場合、ワークブック、ワークシート、セル、セル範囲などを指します。
オブジェクトは階層構造で管理されています。例えば、A1セルを指定するとき以下のように記述するとアクティブシートのセルA1を表します。
Excel.Range("A1")
他のシートやブックを指定したい場合は、上の階層に遡って上から順にオブジェクトを指定していく必要があります。
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Add() // Book1を追加
Excel.Workbooks.Add() // Book2を追加
// Book1のSheet2のセルA1に100を代入
Excel.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100
// アクティブブック(Book2)のSheet2のセルA1に200を代入
Excel.Worksheets("Sheet2").Range("A1").Value = 200
// アクティブブック(Book2)のアクティブシート(Sheet1)のセルA1に300を代入
Excel.Range("A1").Value = 300
7行目の100を代入しているプログラムについて構造の解説。
Excel.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100
最上位のApplicationオブジェクトから省略せずに書くと以下のようになります。
Excel.Application.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100
これをできる限り分割して最小単位で記述すると、以下のようになります。
DIM Application = Excel.Application // Applicationオブジェクト = Excel.Appliationプロパティ
DIM Workbooks = Application.Workbooks // Workbooksコレクション = Applicationオブジェクト.Workbooksプロパティ
DIM Workbook = Workbooks.Item("Book1") // Workbookオブジェクト = Workbooksコレクション.Itemプロパティ
DIM Worksheets = Workbook.Worksheets // Worksheetsコレクション = Workbookオブジェクト.Worksheetsプロパティ
DIM Worksheet = Worksheets.Item("Sheet2") // Worksheetオブジェクト = Worksheetsコレクション.Itemプロパティ
DIM Range = Worksheet.Range("A1") // Rangeオブジェクト = Worksheetオブジェクト.Rangeプロパティ
Range.Value = 100 // Rangeオブジェクト.Valueプロパティ
コレクション
開いているすべてのブック、ブック内のすべてのワークシートなどオブジェクトの集合のことをコレクションといいます。
例えば、Workbookオブジェクトの集合は「Workbooksコレクション」、Worksheetオブジェクトの集合は「Worksheetsコレクション」となります。通常コレクション名は、オブジェクト名に複数形の「s」が付いたものになります。またコレクションはオブジェクトがいくつあるかを取得するためCountプロパティ、単一のオブジェクトを取得するためのItemメソッドまたはItemプロパティを持っています。
コレクションから単一のオブジェクトを取得
コレクションはオブジェクトの集まりで単一のオブジェクトを取得するには、ItemメソッドまたはItemプロパティを使います。
オブジェクト名.Item(インデックス番号)
オブジェクト名.Item(名前)
Itemは省略することができ、オブジェクト名の後ろに( )をつけ、インデックス番号または名前を直接指定することができます。
オブジェクト名(インデックス番号)
オブジェクト名(名前)
例えばWorkbooksコレクションの1番目を取得する場合、以下の2通りの書き方があります。
Workbook = Workbooks.Item(1)
Workbook = Workbooks(1)
すべてのオブジェクトに対して操作を行うにはFOR-TO-NEXT文でItemにインデックス番号を1〜コレクションの数まで回すか、FOR-IN-NEXTで各オブジェクトにアクセスします。
DIM Worksheets = Excel.Worksheets
FOR i = 1 TO Worksheets.Count
DIM Worksheet = Excel.Worksheets.Item(i)
PRINT Woksheet.Name
NEXT
FOR Worksheet IN Worksheets
PRINT Worksheet.Name
NEXT
メソッド
メソッドとは、オブジェクトに対して動作を指示するときに使う「命令」を示すものです。例えばセルA1を選択する、コピーする、削除するなどの動作を命令するときに使います。
引数を指定するには、メソッド名のあとに半角の( )(括弧)の中に引数を記述します。引数が必要ないものは括弧も記述する必要ありません。
オブジェクト.メソッド([引数])
引数が複数ある場合は、引数毎に,(カンマ)で区切って記述します。
オブジェクト.メソッド([引数1,引数2,…])
ExcelのVBAでは引数の内容を順番通りに指定する方法と名前付き引数というメソッドを呼び出すときにどの引数にどの値を渡すのかを名前で指定できる方法があります。
順番通りに引数を指定
以下はワークシートを3個追加する例。追加するシートを指定するのは引数3なので引数1、引数2を省略。省略する引数にはEMPTYPARAMを指定することができます。
Excel.Worksheets.Add(,, 3)
Excel.Worksheets.Add(EMPTYPARAM, EMPTYPARAM, 3)
名前を指定して引数を指定
名前を指定して引数を指定する場合は引数の名前:=値のように記述します。
オブジェクト.メソッド(引数の名前:=値)
以下は名前付き引数でワークシートを3枚追加する例です。
Excel.Worksheets.Add(Count:=3)
以下はワークブックを開く書き方。
Excel.Workbooks.Open(FileName:="D:\Desktop\Book1.xlsx", ReadOnly:=TRUE)
引数の名前は大文字・小文字の区別はなく、順番も若い順である必要はありません。以下は第三引数(ReadOnly)、第一引数(FileName)の順で指定しています。
Excel.Workbooks.Open(readonly:=TRUE, filename:="D:\Desktop\Book1.xlsx")
プロパティ
プロパティとは、オブジェクトの特徴や性質などを示すものです。例えばセルの内容を表すRange オブジェクトのプロパティには、セルの内容を表すRange.Value プロパティ (Excel)、行番号を表すRange.Row プロパティ (Excel)、列番号を表すCOM.COM (Excel)などがあります。
プロパティはオブジェクトの状態を決める項目のことで、オブジェクト毎に使えるプロパティは決まっています。Workbookオブジェクトのプロパティ、Worksheetオブジェクトのプロパティ、Rangeオブジェクトのプロパティのようにそれぞれ固有のプロパティがあります。
プロパティの値を取得する
プロパティの値を取得するときは、オブジェクト名とプロパティ名を.(ピリオド)で区切って書きます。
オブジェクト.プロパティ
以下はセルA1の内容を取得します。
Excel.Range("A1").Value
値を取得するだけでは内容が確認できないので、変数に代入したりPRINT文で出力したりということが必要になります。
DIM str = Excel.Range("A1").Value
PRINT Excel.Range("A1").Value
プロパティの値を指定する
プロパティの値を設定するときは、オブジェクト名とプロパティ名をピリオドで区切って書き、=(イコール)のあとに設定値を書きます。ここでのイコールは代入演算子と呼ばれ、左辺と右辺が等しいという意味の等号とは意味が違うので注意してください。左辺 = 右辺と記述することで右辺の内容を左辺に代入するという意味になります。
オブジェクト.プロパティ = 値
以下はセルA1の内容に100を設定します。
Excel.Range("A1").Value = 100
セルA1にセルB1の内容を代入します。
Excel.Range("A1").Value = Excel.Range("B1").Value
なお、プロパティは様々な種類がありますが、中には値の取得しかできないプロパティもあります。このようなプロパティを読み取り専用プロパティといいます。例えばシートの数を取得するCOM.COM (Excel)は値の取得のみが可能です。
以下のように書くとワークシートの数を取得しnに代入されます。
DIM n = Worksheets.Count
しかし、以下のように代入しようとしてもシートの数が5枚になるわけではありません。
Worksheets.Count = 5
既定プロパティ
既定プロパティとは、オブジェクトの記述だけで参照できるプロパティのことです。通常オブジェクト.プロパティと記述するところ、プロパティを省略してオブジェクトだけでプロパティの値を取得することができます。
PRINT Excel.Range("A1").Value
Rangeオブジェクトの既定プロパティはValueプロパティなので以下のようにValueを省略することができます。
PRINT Excel.Range("A1")
当サイトでは省略された既定プロパティは_Defaultと記載しています。
Range.[_Default](RowIndex, ColumnIndex)