VBAのNewでオブジェクトを動的に作成する方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Newの概要

オブジェクト生成 VBAの予約語

New

概要 New キーワードは、VBAでクラスモジュールのインスタンスを作成したり、オブジェクトを動的に生成するために使用されます。

わかりやすく説明 New は、「このオブジェクトを新しく作って!」という命令です。例えば、Excelの WorkbookWorksheet を動的に作成するときに使います。

  • VBAのクラスモジュールやオブジェクトを動的に生成する。
  • Dim obj As New クラス名 の形で使用する。
  • Excelの WorkbookWorksheet の追加にも利用される。
  • オブジェクト変数の初期化に Set を使うことが多い。

Newの基本的な使い方(クラスモジュールのインスタンス作成)

クラスモジュールを使用して、オブジェクトを作成する基本的な例です。

' クラスモジュール(Class1)内
Public Property Get Message() As String
    Message = "Hello from Class1!"
End Property

' 標準モジュール(Module1)内
Sub CreateClassInstance()
    Dim obj As New Class1
    MsgBox obj.Message, vbInformation, "Newの例"
End Sub

解説:

  • Class1 というクラスモジュールを定義し、そのインスタンスを作成。
  • Dim obj As New Class1 で、オブジェクト obj を生成。
  • 作成したオブジェクトの Message プロパティを取得し、メッセージボックスに表示。

ExcelでのNewの活用例(新しいワークブックの作成)

新しいExcelブックを作成する例です。

Sub CreateNewWorkbook()
    Dim wb As Workbook
    Set wb = Workbooks.Add ' 新しいブックを作成
    wb.SaveAs "C:\Temp\NewWorkbook.xlsx"
    MsgBox "新しいブックを作成しました。", vbInformation, "完了"
End Sub

解説:

  • Workbooks.Add を使って新しいExcelファイルを作成。
  • SaveAs で特定のパスに保存。

Newを使って新しいシートを追加

新しいシートを作成して名前を変更する例です。

Sub AddNewWorksheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add ' 新しいシートを追加
    ws.Name = "新しいシート"
    MsgBox "シートを追加しました。", vbInformation, "完了"
End Sub

解説:

  • ThisWorkbook.Sheets.Add で新しいシートを追加。
  • ws.Name = "新しいシート" でシート名を変更。

Newを使ったオブジェクト変数の初期化(Setを使う方法)

New は Dim ... As New だけでなく、Set を使ってオブジェクトを代入する方法もあります。

Sub InitializeObject()
    Dim obj As Object
    Set obj = New Collection ' 新しいコレクションを作成
    obj.Add "データ1"
    obj.Add "データ2"
    MsgBox "コレクションに " & obj.Count & " 個のデータを追加しました。"
End Sub

解説:

  • Set obj = New Collection で、新しい Collection オブジェクトを作成。
  • データを追加し、Count プロパティで個数を取得。

エラーを回避する方法

New を使用する際に、オブジェクトの初期化に失敗する可能性があるため、エラーハンドリングを追加しましょう。

Sub SafeObjectCreation()
    Dim obj As Object
    On Error Resume Next
    Set obj = New Collection
    
    If Err.Number <> 0 Then
        MsgBox "オブジェクトの作成に失敗しました: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    Else
        MsgBox "オブジェクトを正常に作成しました。"
    End If
End Sub

解説:

  • New の処理でエラーが発生した場合、エラーメッセージを表示。
  • 成功した場合は、通常のメッセージを表示。

Newの注意事項

  • New で作成したオブジェクトは適切に解放する: 使い終わったら Set obj = Nothing で解放するのが望ましい。
  • Excelの組み込みオブジェクトには New を使わない: WorkbookWorksheetSet obj = Workbooks.Add のように作成する。
  • New を使うと、オブジェクトが都度初期化される: そのため、複数回使う場合は注意が必要。

よくある質問

Q: New はすべてのオブジェクトに使えますか?
A: いいえ。Excelの組み込みオブジェクト(WorkbookWorksheet)には Set を使う必要があります。
Q: New を使わない方法はありますか?
A: 事前にオブジェクトを作成しておき、Set を使って参照する方法もあります。
Q: New を使って作成したオブジェクトは自動的に削除されますか?
A: 通常はVBAの終了時に削除されますが、明示的に Set obj = Nothing で解放するのが推奨されます。

まとめ

  • New キーワードは、VBAでオブジェクトを動的に作成するために使用される。
  • クラスモジュールのインスタンス作成や、Excelのワークブック・シートの操作に活用できる。
  • オブジェクト変数の初期化には Set を使うことが一般的。
  • エラーハンドリングを活用し、予期しないエラーを防ぐことが重要。