【Excel VBA 】簡単なアダプター(adapter(委譲))もどき

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

VBAで委譲(コンポジション)を利用したシンプルなデザインパターンのAdapter(アダプター)パターンのサンプルです。

CMyData.cls(データクラス)

Public Name As String

Public Sub DebugPrint()
    Debug.Print "name=" & Me.Name
End Sub

CAdapter.cls(Adapterクラス)

Implements CMyData

'委譲元のクラス
Private m_MyData As CMyData

'追加項目
Public isMarried As Boolean

Private Sub Class_Initialize()
    Set m_MyData = New CMyData
End Sub

Private Sub Class_Terminate()
    Set m_MyData = Nothing
End Sub

'委譲元クラス(CMyData)とのインターフェース実装
Private Sub CMyData_DebugPrint()
    Call Me.DebugPrint
End Sub

Private Property Let CMyData_Name(ByVal RHS As String)
    Me.Name = RHS
End Property

Private Property Get CMyData_Name() As String
    CMyData_Name = Me.Name
End Property

'アダプター公開インターフェース
Public Property Let Name(ByVal RHS As String)
    'CAdapterクラスで名前を加工して委譲元へ渡す
    m_MyData.Name = RHS & " that is Using Adapter Class"
End Property

Public Property Get Name() As String
    Name = m_MyData.Name
End Property

Public Sub DebugPrint()
    m_MyData.DebugPrint
    If Me.isMarried = True Then
        Debug.Print "Sorry, I'm Married"
    End If
End Sub

MainForTest.bas(使い方の例)

Sub Main()
    '委譲元(CMyData)を直接使う場合
    Dim myData As CMyData
    Set myData = New CMyData
    
    myData.Name = "My Name is myData"
    Call myData.DebugPrint
    
    'アダプター(CAdapter)を使う場合
    Dim adapter As CAdapter
    Set adapter = New CAdapter
    adapter.Name = "My Name is myData"
    adapter.isMarried = True
    Call adapter.DebugPrint
End Sub

イミディエイトウィンドウの出力結果

name=My Name is myData
name=My Name is myData that is Using Adapter Class
Sorry, I'm Married

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月11日

  • 変更CAdapterクラスのProperty Get Nameプロパティで、戻り値の代入先がMyData_Nameとなっていた誤りをNameに修正しました。
  • 削除リンク切れとなっていた古い外部ブログのzipダウンロードリンクを削除しました。
  • 変更ソースコードの表示をblockquoteタグからpre/codeタグに変更し、体裁を整えました。

文書情報

記事タイトル
【Excel VBA 】簡単なアダプター(adapter(委譲))もどき
作成日
更新日
Source URL
https://papanda925.com/?p=429

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました