VBAのFriendでモジュール内のメンバーのアクセス制御を行う方法をわかりやすく解説

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

Friendの概要

クラスモジュール内のメンバーを同じプロジェクト内の他のモジュールからアクセス可能にする VBAの予約語

Friend

概要 Friend ステートメントは、VBAのクラスモジュール内で使用されるアクセス修飾子で、同じプロジェクト内の他のモジュールからはアクセスできるが、外部のプロジェクトやインスタンス化されたオブジェクトからはアクセスできないメンバーを定義するために使用されます。

わかりやすく説明 クラス内のメンバーを、同じプロジェクト内でのみ使えるようにする修飾子。

  • クラスモジュール内で使用されるアクセス制御の修飾子。
  • 同じプロジェクト内のモジュールからアクセス可能。
  • 外部のプロジェクトやインスタンス化したオブジェクトからはアクセスできない。

Friendを使った基本的なクラス定義

以下の例では、Friend を使ってクラスモジュール内でメンバーを定義します。

' クラスモジュール(Class1)内に記述
Option Explicit

Friend Sub ShowMessage()
    MsgBox "このメソッドは同じプロジェクト内のモジュールからのみ呼び出せます。"
End Sub

解説:

  • Friend を使うことで、このメソッドは同じプロジェクト内でのみアクセス可能。
  • 外部のプロジェクトからはアクセスできない。

標準モジュールからFriendメソッドを呼び出す

標準モジュール(Module1)から Friend メソッドを呼び出す例です。

' 標準モジュール(Module1)内に記述
Sub TestFriend()
    Dim obj As New Class1
    obj.ShowMessage ' Friendメソッドは同じプロジェクト内ならアクセス可能
End Sub

解説:

  • クラスモジュール Class1ShowMessage を呼び出し。
  • 同じプロジェクト内のため、Friend メソッドが利用可能。

FriendとPublicの違い

Friend は同じプロジェクト内でのみアクセスできるのに対し、Public は外部プロジェクトからもアクセス可能です。

' クラスモジュール(Class1)内に記述
Option Explicit

Public Sub PublicMethod()
    MsgBox "これは外部プロジェクトからもアクセス可能。"
End Sub

Friend Sub FriendMethod()
    MsgBox "これは同じプロジェクト内でのみアクセス可能。"
End Sub

解説:

  • PublicMethod: どこからでもアクセス可能。
  • FriendMethod: 同じプロジェクト内でのみアクセス可能。

Excel VBAでのFriendの活用

Friend を使って Excel のワークブック管理クラスを作成する例です。

' クラスモジュール(WorkbookManager)内に記述
Option Explicit

Friend Sub SaveWorkbook(wb As Workbook)
    wb.Save
    MsgBox "ワークブックを保存しました: " & wb.Name
End Sub

このクラスを標準モジュールから使用する例:

' 標準モジュール(Module1)内に記述
Sub TestSaveWorkbook()
    Dim mgr As New WorkbookManager
    mgr.SaveWorkbook ThisWorkbook
End Sub

解説:

  • Friend を使うことで、同じプロジェクト内の標準モジュールからアクセス可能。
  • 外部のプロジェクトからは SaveWorkbook メソッドを直接呼び出せない。

Friendの注意事項

  • Friend はクラスモジュール内でのみ使用可能: 標準モジュールでは使用できない。
  • 同じプロジェクト内でしかアクセスできない: 他のVBAプロジェクトからは使用できない。
  • 外部プロジェクトへの公開を防ぐ: ライブラリとしてVBAプロジェクトを提供する際、内部メソッドを外部に見せたくない場合に有効。

よくある質問

Q: Friend を標準モジュールで使えますか?
A: いいえ。Friend はクラスモジュールでのみ使用可能です。
Q: Friend を使うメリットは?
A: 外部プロジェクトからのアクセスを制限しつつ、同じプロジェクト内では利用できるようにできます。
Q: Public と Friend の使い分けは?
A: 外部プロジェクトからも使わせたい場合は Public、同じプロジェクト内だけで使う場合は Friend を選びます。

まとめ

  • Friend はクラスモジュール内のメンバーを同じプロジェクト内でのみアクセス可能にする。
  • 外部プロジェクトからはアクセスできないため、内部ロジックを隠蔽できる。
  • Excel VBAでのワークブック管理やカスタムクラスの設計に役立つ。
  • 標準モジュールでは使用できず、クラスモジュール専用の修飾子である。