VBAのImplementsでインターフェースを実装する方法をわかりやすく解説

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

Implementsの概要

クラスモジュールにインターフェースを実装し、統一的なメソッドを提供する VBAの予約語

Implements

概要 Implements ステートメントは、VBAのクラスモジュールでインターフェース(共通のメソッドセット)を実装するために使用されます。これにより、異なるクラス間で統一されたメソッドを提供することができます。

わかりやすく説明 クラスに共通のメソッドを持たせるための設計ルールを適用する命令。

  • 共通のメソッドを持つインターフェースを作成できる。
  • 異なるクラスが統一されたメソッドを実装できる。
  • Excel VBAでオブジェクト指向プログラミングを実現する際に役立つ。

Implementsを使った基本的なインターフェースの定義

以下の例では、IShape というインターフェースを定義し、異なるクラス(円と四角形)で実装します。

' クラスモジュール(IShape) - インターフェースの定義
Option Explicit

Public Sub Draw()
    ' インターフェース用の空のメソッド
End Sub

解説:

  • IShape はインターフェースとして使用。
  • インターフェースには実装を記述しない(サブルーチンのみ定義)。

Implementsを使ったクラスの実装

以下の例では、IShape インターフェースを実装した Circle(円)クラスと Rectangle(四角形)クラスを作成します。

' クラスモジュール(Circle)
Option Explicit
Implements IShape

Public Sub IShape_Draw()
    MsgBox "円を描画します"
End Sub
' クラスモジュール(Rectangle)
Option Explicit
Implements IShape

Public Sub IShape_Draw()
    MsgBox "四角形を描画します"
End Sub

解説:

  • Implements IShape により、IShape インターフェースを実装。
  • 各クラスに IShape_Draw メソッドを定義(IShape の Draw を実装)。

標準モジュールでの呼び出し

以下の例では、異なるクラスのオブジェクトを同じインターフェースを使って処理します。

' 標準モジュール(Module1)
Sub TestShapes()
    Dim shape As IShape
    
    ' 円の描画
    Set shape = New Circle
    shape.Draw
    
    ' 四角形の描画
    Set shape = New Rectangle
    shape.Draw
End Sub

解説:

  • 共通のインターフェース(IShape)を利用して異なるクラスを統一的に処理。
  • オブジェクトを切り替えても同じメソッドを呼び出せる(ポリモーフィズム)。

Excel VBAでのImplementsの活用

Excelシートの異なる操作(セルの書き込みと削除)を統一的に扱う例です。

' クラスモジュール(IExcelAction) - インターフェース定義
Option Explicit

Public Sub Execute()
    ' インターフェースメソッド
End Sub
' クラスモジュール(WriteCell) - セルに値を入力
Option Explicit
Implements IExcelAction

Public Sub IExcelAction_Execute()
    Range("A1").Value = "テスト"
End Sub
' クラスモジュール(ClearCell) - セルをクリア
Option Explicit
Implements IExcelAction

Public Sub IExcelAction_Execute()
    Range("A1").ClearContents
End Sub
' 標準モジュール(Module1) - 実行処理
Sub TestExcelAction()
    Dim action As IExcelAction
    
    ' セルに値を書き込む
    Set action = New WriteCell
    action.Execute
    
    ' セルをクリア
    Set action = New ClearCell
    action.Execute
End Sub

解説:

  • IExcelAction を定義し、異なるアクション(書き込み・削除)を統一的に実行。
  • 新しいアクションを追加しても、同じインターフェースで実行可能。

Implementsの注意事項

  • 標準モジュールでは使用できない: クラスモジュール内でのみ使用可能。
  • インターフェースには実装を書かない: インターフェースはメソッドの宣言のみ。
  • 実装するメソッド名はインターフェースと同じである必要がある: InterfaceName_MethodName の形式を守る。

よくある質問

Q: Implements の主な用途は何ですか?
A: クラス間で統一したメソッドを提供し、異なる実装を統一的に扱うために使います。
Q: インターフェースに変数を定義できますか?
A: いいえ。インターフェースにはメソッドのみを定義し、変数は含めません。
Q: Implements を使うメリットは?
A: 異なるクラスを統一的に扱うことで、コードの拡張性や保守性を向上させます。

まとめ

  • Implements ステートメントはクラスモジュールでインターフェースを実装するために使用される。
  • インターフェースは共通のメソッドを定義し、異なるクラスがそれを実装する。
  • Excel VBAでのオブジェクト指向プログラミングや統一的な操作に活用できる。
  • インターフェースには実装を書かず、クラス側でメソッドを実装する必要がある。