VBAで自動化 VBA一覧 オブジェクト変数

【VBA】オブジェクト指向とは?基本概念と活用方法

Excel VBA は手続き型のプログラミング言語ですが、オブジェクト指向の概念も一部取り入れることができます。オブジェクト指向を活用することで、コードの再利用性・保守性・拡張性を向上 させることができます。

本記事では、Excel VBA におけるオブジェクト指向の基本概念と、その実践方法 について詳しく解説します。

オブジェクト指向とは?

オブジェクト指向(Object-Oriented Programming, OOP) とは、オブジェクト(データと処理をまとめたもの)を基にプログラムを設計する手法 です。主な概念には以下のようなものがあります。

概念説明
クラス(Class)オブジェクトの設計図(データ構造とメソッドを定義)
オブジェクト(Object)クラスから生成された実体
プロパティ(Property)オブジェクトの属性(データ)
メソッド(Method)オブジェクトが実行できる処理(関数)
カプセル化(Encapsulation)データを隠し、適切な方法でアクセスする仕組み
継承(Inheritance)既存のクラスを基に新しいクラスを作成
ポリモーフィズム(Polymorphism)同じメソッド名で異なる動作をさせる

VBA では、クラスモジュール(Class Module) を使うことで、オブジェクト指向プログラミングを実践できます。

Excel VBA におけるオブジェクト指向の活用

・クラスを使わない従来の VBA コード

通常の VBA コードでは、オブジェクト指向を意識せずに手続き型のアプローチを取ります。

Sub WithoutObjectOriented()

Dim name As String
Dim age As Integer

name = "田中"
age = 30

MsgBox "名前: " & name & vbCrLf & "年齢: " & age

End Sub

この方法では、データ(nameage)が分離しており、関連する処理をまとめることができません。

・クラスモジュールを使用してオブジェクト指向を適用

クラスを作成し、データと処理をまとめることで、オブジェクト指向を実践できます。

1. クラスの作成

  1. VBA エディタで「挿入」→「クラスモジュール」を追加
  2. クラスの名前を Person に変更
  3. 以下のコードを Person クラスに記述

' Person クラス
Option Explicit

Private pName As String
Private pAge As Integer

' プロパティ: 名前
Public Property Get Name() As String

Name = pName

End Property

Public Property Let Name(value As String)

pName = value

End Property

' プロパティ: 年齢
Public Property Get Age() As Integer

Age = pAge

End Property

Public Property Let Age(value As Integer)

pAge = value

End Property

' メソッド: 情報を表示
Public Sub ShowInfo()

MsgBox "名前: " & pName & vbCrLf & "年齢: " & pAge

End Sub

2. クラスを利用するコード

標準モジュールに以下のコードを記述し、Person クラスを利用します。

Sub UsePersonClass()

Dim p As Person
Set p = New Person

p.Name = "田中"
p.Age = 30

p.ShowInfo ' メソッドの呼び出し

End Sub

メリット

Person クラスを作成することで、関連データを一元管理 できる
✅ クラスを使うことで、再利用性と保守性が向上 する

クラスの応用例

住所録管理クラス

クラスを利用すると、複数のオブジェクトを管理しやすくなります。

1. Address クラスの作成

Option Explicit

Private pName As String
Private pAddress As String

' プロパティ: 名前
Public Property Get Name() As String

Name = pName

End Property

Public Property Let Name(value As String)

pName = value

End Property

' プロパティ: 住所
Public Property Get Address() As String

Address = pAddress

End Property

Public Property Let Address(value As String)

pAddress = value

End Property

' メソッド: 情報を表示
Public Sub ShowInfo()

MsgBox "名前: " & pName & vbCrLf & "住所: " & pAddress

End Sub

2. クラスを活用するコード

Sub UseAddressClass()

Dim person1 As Address
Dim person2 As Address

' オブジェクトのインスタンスを作成
Set person1 = New Address
Set person2 = New Address

' データをセット
person1.Name = "佐藤"
person1.Address = "東京都"

person2.Name = "鈴木"
person2.Address = "大阪府"

' 情報を表示
person1.ShowInfo

person2.ShowInfo

End Sub

メリット

  • クラスを使用することで データ管理が容易
  • インスタンスごとに異なるデータを格納可能

Excel VBA におけるオブジェクト指向の注意点

  1. VBA は完全なオブジェクト指向言語ではない
    • 継承(Inheritance) がサポートされていない
    • ポリモーフィズム(Polymorphism) も直接的には使用不可
  2. オブジェクトの破棄
    • Set オブジェクト = Nothing を使用して、不要になったオブジェクトを解放する
      Set person1 = Nothing
      Set person2 = Nothing

  3. パフォーマンス
    • クラスモジュールを多用すると 処理速度が遅くなる可能性 あり
    • 大量データ処理の場合は、配列Collection を活用するのも選択肢

まとめ

オブジェクト指向のメリット

データと処理を一元管理 できる
コードの再利用性・保守性が向上
大規模なプログラムでも整理しやすい

Excel VBA での実践方法
  1. クラスモジュールを作成
  2. プロパティを定義
  3. メソッドを定義
  4. 標準モジュールでクラスをインスタンス化し、活用

 

    -VBAで自動化, VBA一覧, オブジェクト変数