VBAを学び始めると、
- 「オブジェクト指向とは何ですか?」
- 「VBAはオブジェクト指向なのですか?」
- 「プロシージャ指向との違いがわかりません」
といった疑問を持つ方が多いでしょう。
実際、VBAは他のプログラミング言語のような本格的なオブジェクト指向言語ではありません。しかし、ExcelやWordを操作する仕組みそのものはオブジェクト指向の考え方で作られています。
この記事では、VBAにおけるオブジェクト指向の立ち位置を理解しながら、プロシージャ指向との違いについてわかりやすく解説します。
1. プロシージャ指向とは
プロシージャ指向とは、
「処理の流れを中心にプログラムを組み立てる考え方」
です。
VBA初心者が最初に書くコードの多くは、プロシージャ指向になっています。
例えば次のコードです。
Sub Sample()
Range("A1").Value = "こんにちは"
Range("A2").Value = "VBA"
End Sub
このコードでは、
- A1に値を入れる
- A2に値を入れる
という処理の順番を記述しています。
つまり、
「何をするか」
を中心に考えるのがプロシージャ指向です。
プロシージャ指向の特徴
メリット
- 理解しやすい
- 小規模開発に向いている
- VBA初心者でも扱いやすい
デメリット
- コードが増えると管理が大変
- 再利用しにくい
- 保守性が低くなる
小さなマクロなら問題ありませんが、数千行を超えるようなシステムになると管理が難しくなります。
2. オブジェクト指向とは
オブジェクト指向とは、
「モノ(オブジェクト)を中心にプログラムを考える設計手法」
です。
現実世界に存在するモノをプログラム上に表現し、そのモノに対して処理を行います。
例えば「車」を考えてみましょう。
車には、
- 色
- メーカー
- 速度
などの情報があります。
また、
- 走る
- 止まる
- 曲がる
といった動作もあります。
オブジェクト指向では、
情報(データ)と動作(処理)を1つにまとめて管理します。
オブジェクトのイメージ
例えば人間なら、
データ
- 名前
- 年齢
動作
- 歩く
- 話す
を持っています。
オブジェクト指向では、
これらを一つの「人」という単位で管理します。
3. VBAにおけるオブジェクト指向
実はVBAで普段使っているものの多くがオブジェクトです。
例えば、
- Application
- Workbook
- Worksheet
- Range
などです。
以下のコードを見てみましょう。
Worksheets("Sheet1").Range("A1").Value = "Hello"
これは、
- Worksheetオブジェクト
- Rangeオブジェクト
- Valueプロパティ
を順番に操作しています。
つまりVBAでは、
Excelそのものがオブジェクトの集合体として作られている
のです。
VBAは完全なオブジェクト指向言語ではない
JavaやC#などの言語では、
- 継承
- ポリモーフィズム
- カプセル化
といった機能を活用できます。
一方VBAでは、
- クラスモジュールによるオブジェクト作成
- オブジェクトの利用
は可能ですが、
完全なオブジェクト指向言語ではありません。
そのため、
「オブジェクト指向の考え方を取り入れた言語」
と理解するとわかりやすいでしょう。
4. プロシージャ指向とオブジェクト指向の違い
プロシージャ指向
処理の流れを中心に考える
Sub AddData()
Cells(1, 1).Value = "商品A"
Cells(2, 1).Value = "商品B"
Cells(3, 1).Value = "商品C"
End Sub
「何をするか」が主役です。
オブジェクト指向
モノを中心に考える
例えば、
「社員」
というオブジェクトを考えます。
Employee.Name = "田中"
Employee.Age = 30
Employee.DisplayInfo
「誰が何をするか」が主役になります。
違いを表で比較
| 項目 | プロシージャ指向 | オブジェクト指向 |
|---|---|---|
| 考え方 | 処理中心 | モノ中心 |
| 主役 | 手順・処理 | オブジェクト |
| 管理対象 | 処理の流れ | データと処理 |
| 小規模開発 | 得意 | やや大げさ |
| 大規模開発 | 管理しにくい | 管理しやすい |
| 再利用性 | 低い | 高い |
5. VBA学習者はオブジェクト指向をどこまで理解すべきか
結論から言うと、
VBAで業務効率化ツールやマクロを作るレベルであれば、
- オブジェクト
- プロパティ
- メソッド
を理解するだけでも十分です。
例えば、
Range("A1").Value = "データ"
このコードであれば、
- Range → オブジェクト
- Value → プロパティ
です。
まずはExcelのオブジェクト構造を理解することが重要です。
6. まとめ
プロシージャ指向は、
「処理の流れを中心に考える設計手法」
です。
一方、オブジェクト指向は、
「モノ(オブジェクト)を中心に考える設計手法」
です。
VBAは完全なオブジェクト指向言語ではありませんが、Excel自体がオブジェクトの集合体として設計されています。
そのためVBAを学ぶ上では、
- オブジェクト
- プロパティ
- メソッド
の関係を理解することが非常に重要です。
オブジェクト指向を難しく考える必要はありません。
まずは、
「Excelの部品(オブジェクト)を操作するのがVBA」
と理解するところから始めましょう。
コメント