VBA関数
GetObject関数

Excelマクロで必須のVBA関数を入門・初級・初心者向けに詳細解説
公開日:2019-11-19 最終更新日:2021-10-23

GetObject関数


ActiveX コンポーネントから提供されたオブジェクトの参照を返します。
ファイルパス(フルパスと名前)からオブジェクトの参照を作成したり、既に起動中のオブジェクトを取得する際に使用します。



GetObject関数の構文

GetObject([ pathname ], [ class ])

pathname
省略可能。Variant (String)。
取得するオブジェクトを含むファイルの完全パスと名前。
指定文字列の大文字小文字は問いません。
pathnameを省略する場合は、classを指定する必要があります。
pathnameに関連付けられたアプリケーションが起動され、指定したファイル内のオブジェクトがアクティブ化されます。

省略時
指定したクラスの、現在起動中のオブジェクトの参照を取得します。
指定したクラスのオブジェクトが起動していない時はエラーになります。
""(長さ0の文字列)指定時
指定したクラスの新しいインスタンスへの参照が返されます。

class
省略可能。Variant (String)。
オブジェクトのクラスを表す文字列。
classを省略する場合は、pathnameを指定する必要があります。
classの構文は、appname.objecttype で指定します。

appname 必須。Variant(String)。
オブジェクトを提供するアプリケーションの名前。
objecttype 必須。Variant(String)。
作成するオブジェクトの型またはクラス。

構文には一部例外があり、"htmlfile"の指定でHTMLドキュメントを作成できます。
CSVのマクロVBAでの読込方法については複数の記事を掲載しており、人気記事として多くのアクセスがあります。掲載しているVBAコードは汎用的に書いてあり、ほぼそのまま使用できるものです。しかし、CSVは多くの形式(区切り文字、文字コード等)があり、今まで掲載したコードでは解決出来ないものがあります。

戻り値
取得または作成したオブジェクトへの参照が返されます。
指定したファイルが存在しない場合、または、指定した型のオブジェクトが存在しない場合は、エラーが発生します。


GetObjectの解説

GetObject関数で作成または取得したオブジェクトを利用するには、以下のような方法があります。
・CreateObject関数の戻り値をSetステートメントでオブジェクト変数に代入する
・Withステートメントのオブジェクトに指定する
・プロシージャー呼び出し時の実引数に指定する
等々の方法があります。

ファイルの一部をアクティブにできるアプリケーションもあります。
ファイルの一部をアクティブにするには、ファイル名の後に感嘆符 (!) を付け、アクティブにする部分を表す文字列をその後に指定します。

引数classを指定しない場合、指定したファイル名に基づいて、起動するアプリケーションおよびアクティブにするオブジェクトが決められます。
ただし、ファイルによっては、複数のオブジェクトのクラスがサポートされています。
このような場合、ファイル内でアクティブにするオブジェクトを指定するには、省略可能な引数 class を使います。

単一インスタンス オブジェクトの場合、長さ 0 の文字列 ("") を指定して GetObject 関数を呼び出すと、常に同じインスタンスが返り、引数 pathname を省略すると、エラーが発生します。

Excelの複数のインスタンスが実行されている場合、GetObjectは最初に起動されるインスタンスに接続されます。
したがって、別のインスタンスを指定してGetObjectを実行することはできません。

文章を読むだけでは、なかなか理解しづらいと思います。
以降のVBAサンプルコードで具体的な使い方を確認してください。


GetObject関数の使用例

エクセルVBAで良く使うオブジェクトは以下を参照してください。
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclas…

pathnameとclassを指定

Dim obj As Object
Set obj = GetObject("フルパス\ワードファイル.docx", "Word.Document")
With obj.Application
  .Visible = True
  .Selection.TypeText Text:="abc"
End With
※ファイルが無い場合はエラーになります。

Wordインスタンスが無ければ作成し、あればそのインスタンスに、
"フルパス\ワードファイル.docx"を読み込んだオブジェクトへの参照を返します。
上記VBAでは、変数objを解放していないので、Wordは起動されたままになります。

pathnameのみ指定、classを省略

Set obj = GetObject("フルパス\エクセル.xlsx")
Debug.Print TypeName(obj)
Set obj = GetObject("フルパス\ワードファイル.docx")
Debug.Print TypeName(obj)
Set obj = GetObject("フルパス\パワポファイル.pptx")
Debug.Print TypeName(obj)
Set obj = Nothing
※ファイルが無い場合はエラーになります。

この実行結果は、
Workbook
Document
Presentation
このようになります。
Applicationではなく、その下のオブジェクトが返されることに注意してください。
class を指定しない場合、
起動するアプリケーションとアクティブ化するオブジェクトは、指定したファイル名に基づいて自動的に決定されます。

変数宣言のAsで型指定する場合は、それぞれ、
Dim obj As Workbook
Dim obj As Word.Document
Dim obj As PowerPoint.Presentation
ただし、それぞれのアプリケーションの参照設定が必要になります。

pathnameに""とclassを指定

Dim obj As Object
Set obj = GetObject("", "Word.Application")
Debug.Print obj.Name
Set obj = GetObject("", "Word.Document")
Debug.Print obj.Name
Set obj = Nothing

この実行結果は、
Microsoft Word
文書 1
このようになります。
どちらも同じインスタンスになりますが、アクティブ化されるオブジェクトが違ってきます。
型を指定する場合は、それぞれ、
Dim obj As Word.Application
Dim obj As Word.Document
ただし、Wordアプリケーションの参照設定が必要になります。

classのみ指定、pathnameを省略

Dim obj1 As Object
Set obj1 = GetObject("フルパス\sample1.docx")
Debug.Print obj1.Name
Dim obj2 As Object
Set obj2 = GetObject(, "Word.Application")
Debug.Print obj2.Documents(1).Name
Set obj1 = Nothing
Set obj2 = Nothing
※ファイルが無い場合はエラーになります。

Wordが起動されていない状態で、このVBAを実行した結果は、
sample1.docx
sample1.docx
となります。
obj1とobj2の違いについて注意してください。
obj1は、Word.Documentです。
obj2は、Word.Applicationになります。
obj2では、既に起動されているWordアプリケーションを取得しています。
そして、Wordアプリケーションの先頭のドキュメントを表示しています。

上記VBAで最初のGetObjectが無く、2番目のGetObjectだけの場合、
Wordアプリケーションが起動されていない場合はエラーとなります。

Dim obj As Object
Set obj = GetObject(, "Word.Application")
Set obj = Nothing

この場合、
Wordアプリケーションが起動されていればそのアプリケーションが取得され、
Wordアプリケーションが起動されていない場合はエラーとなります。

VBA マクロ GetObject関数


※365では開いているドキュメントを取得できません。
2021/10/23現在の365では開いているドキュメントを取得できませんでした
2013では取得できているので、どこかの時点で変更があったようです。
使用する場合は注意してください。


単一インスタンス オブジェクトの場合、pathnameを省略するとエラーが発生

Set obj = GetObject("", "Scripting.FileSystemObject")
Set obj = GetObject(, "Scripting.FileSystemObject")

pathnameを省略した2行目はエラーになります。
"Scripting.Dictionary"
"VBScript.RegExp"
これらも同様です。
このようなオブジェクトの場合、pathnameには""を指定するかCreateObject使用してください。


GetObject関数とCreateObject関数の使い分け

GetObject関数は、
オブジェクトの現在のインスタンスがある場合、
または、
既にファイルが読み込まれた状態のオブジェクトを作成する場合に使用します。

現在のインスタンスがなく、ファイルが読み込まれた状態のオブジェクトを起動する必要がない場合に使用します。

開くべきファイルが限定されている場合は、GetObject関数の方がVBA記述が少なくて済みます。
ただし、GetObjectで返されるオブジェクトには注意する必要があります。

Dim obj As Object
Set obj = GetObject("フルパス\sample1.docx")
Debug.Print obj.Name
Set obj = Nothing

Dim wdApp As Object
Set wdApp = CreateObject("Word.Application")
Dim obj As Object
Set obj = wdApp.Documents.Open("フルパス\sample1.docx")
Debug.Print obj.Name
Set obj = Nothing
Set wdApp = Nothing

上記2つのVBAは同じことをしています。
変数objには"フルパス\sample1.docx"を読み込んだWord.Documentへの参照が入ります。


CreateObject関数

GetObject関数と似たものにCreateObject関数があります。
CreateObject関数は、ActiveX オブジェクトへの参照を作成して返します。
CreateObject関数
CreateObject関数は、ActiveXオブジェクトへの参照を作成して返します。CreateObject関数を使う事で、参照設定することなくActiveXオブジェクトを使用できるようになります。つまり、VBAで外部ライブラリを使用する場合にCreateObject関数を使用します。


Office VBA リファレンス GetObject関数


※VBA関数一覧
マクロVBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他……




同じテーマ「VBA関数」の記事

CreateObject関数
DoEvents関数
Environ関数
GetObject関数
IMEStatus関数
InputBox関数
MsgBox関数
Partition関数
QBColor関数
RGB関数
Shell関数


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ