クラスの基礎【基本】VBAプログラム
Автор: そふとのイトウ
Загружено: 2026-01-30
Просмотров: 2
Описание:
(B0003)mv【基本】(VBA-Excel)クラスの基礎
【目次】
クラスとは何か!
簡単なクラスを作る。
WithEventsはクラスを使わないと出来ない。
クラスの部品化の事例。レコード定義を作る。
クラスの継承の動作を見る。
クラスの多様体の動作を見る。
-----------------------------------
≪ソースプログラム≫
/////////「モジュール」
Sub テスト()
'クラスのオブジェクト化
Dim AA1 As Class1: Set AA1 = New Class1
Dim BB2 As Class1: Set BB2 = New Class1
'クラスに値をセット
AA1.lng値X = 2
AA1.lng値Y = 3
BB2.lng値X = 20
BB2.lng値Y = 30
'計算メソッドを動かす
Dim 結果値 As Long
結果値 = AA1.計算 + BB2.計算
'結果
Debug.Print 結果値
Debug.Print "各々値:" & AA1.lng値Z & " --- " & BB2.lng値Z
End Sub
//////////「クラス」
'公開
Public lng値X As Long
Public lng値Y As Long
Public lng値Z As Long
'非公開
Private lngWORK As Long
Private Const lngVal3 As Long = 3
Function 計算() As Long
lngWORK = lng値X * lng値Y + lngVal3
lng値Z = lngWORK
計算 = lngWORK
End Function
//////////
====================
/////////「モジュール」
Private wObj As Class1
Private Sub テスト()
'Class1オブジェクト化
Set wObj = New Class1
'クラス初期化
Call wObj.Initialize(Sheet1)
End Sub
Private Sub テスト終了()
Set wObj = Nothing
End Sub
//////////「クラス」
Option Explicit
Public WithEvents 試験sheet As Worksheet
Sub Initialize(ws As Worksheet)
Set 試験sheet = ws
End Sub
Private Sub 試験sheet_SelectionChange(ByVal Target As Range)
Cells(Target.Row, Target.Column + Target.Columns.Count) = _
"←" & Replace(Target.Address, "$", "")
End Sub
//////////
====================
/////////「モジュール」
Sub テスト()
'
'クラスをオブジェクト化
Dim ReadRec As 名前Record
Dim WorkRec As 名前Record
Set ReadRec = New 名前Record
Set ReadRec = New 名前Record
'書き込み配列作成
Dim WriteRec() As 名前Record
ReDim WriteRec(0 To 1)
'
'レコード1件作成
ReadRec.lng番号 = 100
ReadRec.str名前 = "いとう"
ReadRec.str住所 = "東京"
ReadRec.dtm更新日 = Now
'
'ワークへ一旦移動
Set WorkRec = ReadRec
Set ReadRec = Nothing
'
'レコード2件作成
Set ReadRec = New 名前Record
ReadRec.lng番号 = 200
ReadRec.str名前 = "さとう"
ReadRec.str住所 = "大阪"
ReadRec.dtm更新日 = Now
'
'WriteRec配列へ書き込み
Set WriteRec(0) = New 名前Record
Set WriteRec(0) = ReadRec
Set ReadRec = Nothing
Set WriteRec(1) = New 名前Record
Set WriteRec(1) = WorkRec
Set WorkRec = Nothing
'
End Sub
//////////「クラス」名前Record
'レコード定義
Public lng番号 As Long
Public str名前 As String
Public str住所 As String
Public dtm更新日 As Date
//////////
====================
//////////
Sub 継承の理解() 'フォントから継承の過程を見る。
'フォントを確認
Dim wFont As Object
Set wFont = Selection.Font
Debug.Print "①【型:" & TypeName(wFont) & "】"
Debug.Print wFont.Name
'フォントの親はセル
Dim 親_wFont As Object
Set 親_wFont = wFont.Parent
Debug.Print "②【型:" & TypeName(親_wFont) & "】"
Debug.Print 親_wFont.Address & " - (値:" & 親_wFont.Text & ")"
'セルの親はシート
Dim 親_wCell As Object
Set 親_wCell = wFont.Parent.Parent
Debug.Print "③【型:" & TypeName(親_wCell) & "】"
Debug.Print 親_wCell.Name
'シートの親はブック
Dim 親_wBook As Object
Set 親_wBook = wFont.Parent.Parent.Parent
Debug.Print "④【型:" & TypeName(親_wCell) & "】"
Debug.Print 親_wBook.Name
'ブックの親はExcel
Dim 親_wExcel As Object
Set 親_wExcel = wFont.Parent.Parent.Parent.Parent
Debug.Print "⑤【型:" & TypeName(親_wExcel) & "】"
Debug.Print 親_wExcel.Name
'Excelの親はExcel -----> ⑤より上は同じ
Dim 親_wZZZZ As Object
Set 親_wZZZZ = wFont.Parent.Parent.Parent.Parent.Parent
Debug.Print "⑥【型:" & TypeName(親_wZZZZ) & "】"
Debug.Print 親_wZZZZ
'ExcelApplicationから継承先を辿りFont名を表示させる。
Debug.Print "⑦【フォント名読み出し】" & vbLf & _
Application. _
Workbooks("クラスの理解.xlsm"). _
Worksheets("Sheet1"). _
Range("$A$1"). _
Font.Name
End Sub
//////////
'--------------------------------------
Sub 多様体の理解() '型の違うオブジェクトを代入し変化を見る
Dim wTemp As Variant
Set wTemp = Application
Call 表示(wTemp)
Set wTemp = ThisWorkbook
Call 表示(wTemp)
Set wTemp = Sheet1
Call 表示(wTemp)
Set wTemp = Cells(1, 1)
Call 表示(wTemp)
End Sub
//////////
Function 表示(ByRef wObj As Variant)
On Error Resume Next
Debug.Print "----------"
Debug.Print wObj.Name
Debug.Print "(Err:" & Err & ")" & Err.Description
End Function
-----------------------------------
≪解説≫
VBAのクラスとは?
クラスは、プログラムを作成しただけでは動きません。
その他のモジュールから、利用される形で使われます。
利用するとは、他のモジュール側で、クラスを定義しインスタンス処理を行う事で利用可能となる事を示します。
この処理を行う事で、クラスはオブジェクトとなり動きます。
クラスの特徴とは「部品化」「継承」「多様体」です。
しかし、VBAで作成されるプログラムが、継承、多様体を必要とする程の、大きなシステムとして使われる事が、ほぼ無いと言うのが現実。
また、多様体では定義型の変化に従って、被プログラム側での動作が違って動くと言う特徴があります。しかし、型の多重定義がVBAでは出来ない為に、これを作るのは難しいと言うことがあります。
ところが、Excelソフトはクラスの塊で出来ています。
ここでは「部品化」の有用性と「継承」「多様体」がどの様にExcelの中で存在しているか、簡単な事で紹介したいと思います。
これらクラスの特性は、VBAを使えば度々出会いますので、知って於いた方が良いと思います。
-----------------------------------
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: