VBAテクニック集 VBA一覧 その他の知識 プロパティ・メソッド解説

【VBA】Excel VBAのCreateObject関数についての入門ガイド

Excel VBAである程度のマクロを書けるようになると、
次に必ず目にするのが 「CreateObject」 という関数です。

Set obj = CreateObject("Scripting.Dictionary")

コード自体は短いにもかかわらず、

  • 何をしているのか分からない
  • Set が必要な理由が分からない
  • New との違いが説明できない
  • なぜエラーになることがあるのか分からない

といった理由で、なんとなく避けられがちな存在でもあります。

しかし実務では、CreateObject を理解しているかどうかで
VBAでできることの幅が大きく変わります。

  • Dictionary を使った高速集計
  • FileSystemObject を使ったファイル操作
  • Outlook / Word / Internet Explorer などの外部アプリ操作
  • RPAや自動化処理との連携

これらはすべて、CreateObject の理解が前提です。

この記事では、Excel VBA初心者〜中級者の方に向けて、

  • CreateObject関数とは何か
  • なぜ使う必要があるのか
  • 基本構文と考え方
  • New との違い
  • よく使われる代表的なオブジェクト
  • 実務で壊れない書き方・注意点

までを、入門ガイドとして体系的に解説します。


✅ CreateObject関数とは何か

CreateObject関数を一言で表すと、
**「外部オブジェクトを動的に生成する関数」**です。

難しく聞こえますが、
考え方をシンプルにすると次のようになります。

Excel VBAから、Excel以外の機能や仕組みを借りてくるための入口

これが CreateObject の本質です。

・CreateObjectの基本構文

Set 変数 = CreateObject("オブジェクト名")

ここで重要なのは、

  • Set を使う
  • 文字列でオブジェクト名を指定する

という2点です。


✅ なぜCreateObjectを使う必要があるのか

VBAには、最初から使えるオブジェクト(Range、Worksheet など)があります。
それなのに、なぜ CreateObject を使う必要があるのでしょうか。

・Excel標準オブジェクトだけでは限界がある

Excel VBAだけでできることには限界があります。

  • 高速なキー管理
  • ファイル・フォルダの詳細操作
  • メール送信
  • 他Officeアプリの操作

これらは、Excel標準のオブジェクトだけでは不十分です。

・CreateObjectは「外部の力」を借りる仕組み

CreateObjectを使うことで、

  • Windowsが持っている機能
  • 他のアプリケーションの機能

VBAから直接操作できるようになります。


✅ CreateObjectとSetの関係を正しく理解する

CreateObjectを使う際、必ずセットで出てくるのが Set です。

・なぜSetが必要なのか

Dim obj As Object
Set obj = CreateObject("Scripting.Dictionary")

ここで obj に代入しているのは、

  • 数値
  • 文字列

ではなく、オブジェクトそのものです。

VBAでは、オブジェクトを変数に代入する場合、
必ず Set を使うルールになっています。

・Setを使わないとどうなるか

obj = CreateObject("Scripting.Dictionary")

コンパイルエラーになります。

これは構文ミスではなく、
オブジェクト代入のルール違反です。

参考:【VBA】Setとは?オブジェクト変数の基本と参照の仕組み|初心者が必ず押さえるべき基礎文法


✅ CreateObjectとNewの違い【超重要】

CreateObjectを理解するうえで、
避けて通れないのが New との違いです。

・Newを使った例

Dim dic As New Dictionary

・CreateObjectを使った例

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

一見すると同じことをしているように見えますが、
内部の仕組みと使いどころが異なります。


・Newの特徴

  • 参照設定が必要
  • コンパイル時に型が決まる
  • 補完が効く

向いているケース

  • 小規模マクロ
  • 自分専用ツール
  • 環境が固定されている場合

・CreateObjectの特徴

  • 参照設定が不要
  • 実行時にオブジェクトを生成
  • 環境差異に強い

向いているケース

  • 配布用マクロ
  • 複数PCで使うツール
  • RPA・自動化との連携

実務では CreateObject の方が使われる場面が圧倒的に多いです。


✅ CreateObjectでよく使われる代表的なオブジェクト

ここからは、実務で使用頻度の高いオブジェクトを紹介します。


・Scripting.Dictionary(最重要)

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

できること

  • キーと値をセットで管理
  • 重複チェック
  • 高速な集計

実務用途

  • 重複データの排除
  • ユニーク一覧作成
  • 件数カウント

・FileSystemObject(ファイル操作)

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

できること

  • ファイル存在チェック
  • フォルダ操作
  • ファイル名取得

実務用途


・Outlook.Application(メール操作)

Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")

できること

  • メール作成
  • 添付ファイル操作
  • 自動送信

・WScript.Shell(環境操作)

Dim sh As Object
Set sh = CreateObject("WScript.Shell")

できること


✅ CreateObjectを使った基本的な実務サンプル

・Dictionaryを使った重複チェック例

Sub CheckDuplicate()

    Dim dic As Object
    Dim arr As Variant
    Dim i As Long

    Set dic = CreateObject("Scripting.Dictionary")
    arr = Range("A2:A100").Value

    For i = LBound(arr, 1) To UBound(arr, 1)
        If Not dic.Exists(arr(i, 1)) Then
            dic.Add arr(i, 1), 1
        End If
    Next i

    MsgBox dic.Count

End Sub

このコードのポイント


✅ CreateObject使用時のよくあるエラーと原因

CreateObjectは便利ですが、
エラーが出たときに原因が分かりにくいという特徴もあります。

・エラー① ActiveX コンポーネントを作成できません

主な原因

  • オブジェクト名のスペルミス
  • 対象オブジェクトがPCに存在しない
CreateObject("Scripting.Dictionry") ' スペルミス

・エラー② オブジェクト変数または With ブロック変数が設定されていません

原因

  • Set を忘れている
  • CreateObjectが失敗している

✅ CreateObjectを安全に使うための実務テクニック

・Nothingチェックを入れる

If dic Is Nothing Then
    MsgBox "オブジェクト生成に失敗しました"
    Exit Sub
End If

・エラーハンドリングを組み合わせる

On Error Resume Next
Set dic = CreateObject("Scripting.Dictionary")
On Error GoTo 0

✅ CreateObjectはRPA・自動化と相性が良い理由

近年の実務では、

  • Excel VBA
  • UiPath / Power Automate

といった RPA連携 が増えています。

CreateObjectを使えば、

  • 参照設定不要
  • 環境依存が少ない
  • 配布しやすい

という特性から、
自動化フローの部品として非常に扱いやすいです。


✅ よくある誤解と注意点

・CreateObjectは「難しい機能」ではない

→ 単なる入口であり、怖がる必要はありません

・必ず Set を使う

→ これを忘れるとすべてが崩れます

・オブジェクト名は文字列

→ 補完が効かないためスペル注意


 

✅ まとめ:CreateObjectを理解するとVBAの世界が一気に広がる

  • CreateObjectは外部オブジェクトを生成する関数
  • Setとセットで使う
  • Newとの違いを理解することが重要
  • Dictionary・FSOは実務必須
  • 参照設定不要で配布向き
  • RPA・自動化と非常に相性が良い

CreateObjectを正しく理解すると、
Excel VBAは 単なるマクロ作成ツールから、業務自動化ツールへ進化します。

最初は難しく感じるかもしれませんが、
一度仕組みが分かれば、
「なぜ今まで使っていなかったのか」と感じるはずです。

ぜひこの記事をきっかけに、
CreateObjectを使った実務マクロへ一歩踏み出してみてください。

参考:Excel VBAでのProgID活用法: CreateObjectとGetObjectの比較

    -VBAテクニック集, VBA一覧, その他の知識, プロパティ・メソッド解説