「銀行口座クラス」を例に、PublicとPrivateを使い分けた設計を示します。
クラス設計の考え方
- Private
- 外部から直接触らせたくない内部データ(残高や暗証番号など)
- 内部処理専用のメソッド(計算やチェック用)
- Public
- 外部から利用するためのインターフェース(入金、出金、残高照会など)
- 外部に公開するプロパティ(口座番号など)
クラスモジュール例(BankAccount)
' クラスモジュール: BankAccount
' --- 内部データ(非公開) ---
Private balance As Currency
Private pinCode As String
' --- 公開プロパティ ---
Public Property Get AccountNumber() As String
AccountNumber = "AC-" & CStr(Me.GetHashCode) ' 仮の口座番号生成
End Property
' 残高は読み取り専用で公開
Public Property Get Balance() As Currency
Balance = balance
End Property
' --- 公開メソッド ---
Public Sub Deposit(ByVal amount As Currency)
If amount > 0 Then
balance = balance + amount
Else
Err.Raise vbObjectError + 1000, "BankAccount", "入金額が不正です"
End If
End Sub
Public Sub Withdraw(ByVal amount As Currency, ByVal pin As String)
If Not CheckPin(pin) Then
Err.Raise vbObjectError + 1001, "BankAccount", "暗証番号が違います"
End If
If amount <= 0 Then
Err.Raise vbObjectError + 1002, "BankAccount", "出金額が不正です"
End If
If amount > balance Then
Err.Raise vbObjectError + 1003, "BankAccount", "残高不足です"
End If
balance = balance - amount
End Sub
' --- 非公開メソッド ---
Private Function CheckPin(ByVal pin As String) As Boolean
CheckPin = (pin = pinCode)
End Function
' --- 初期化用(公開) ---
Public Sub Initialize(ByVal initialBalance As Currency, ByVal pin As String)
balance = initialBalance
pinCode = pin
End Sub
VB呼び出し例(標準モジュール)
Sub TestBankAccount()
Dim myAccount As New BankAccount
' 初期化
myAccount.Initialize 10000, "1234"
' 入金
myAccount.Deposit 5000
' 出金(暗証番号チェックあり)
On Error Resume Next
myAccount.Withdraw 3000, "9999" ' → エラー「暗証番号が違います」
If Err.Number <> 0 Then
MsgBox "エラー: " & Err.Description
Err.Clear
End If
' 正しい暗証番号で出金
myAccount.Withdraw 2000, "1234"
' 残高確認
MsgBox "残高は " & myAccount.Balance & " 円です"
End Sub
VBポイント
- Private balance / pinCode → 外部から直接触れないようにして安全性を確保
- Public Deposit / Withdraw → 外部から利用できる操作を公開
- Private CheckPin → 内部処理専用の暗証番号チェック
- カプセル化 → 「外部に見せる部分」と「内部に隠す部分」を分けることで、安全で使いやすいクラスになる
👉 このように Publicは外部インターフェース、Privateは内部処理やデータ保持 に使い分けるのが基本です。
次のステップとして「利息計算を内部で行い、外部からは残高に反映された結果だけ見える」ような拡張をしてみると、さらに実用的な銀行口座クラスになります。


