| 
    
     |  | ▼tak さん: こんばんは。
 
 >現在以下のような構造体を作成し標準モジュール内で会社名の文字数カウントや
 >社員名の文字数をカウントしたりしています。
 >
 >===================================
 > 現在
 >===================================
 >
 >構造体:会社
 > 会社名
 > 部署名
 > 社員(100)
 > 売上
 >
 >構造体:社員
 >    社員名
 >   入社年度
 >
 >
 >クラス化することで処理をカプセル化できればと思い以下への変更を考えています。
 >あまりメリットはないでしょうか?
 
 メリットがあるか否かは、はっきりは分かりかねますが、
 私も汎用的な再利用できるものは、クラス化する場合が多いのですが、
 上記のようなかなりこのオブジェクトを動かすプログラムが限定されるような
 クラスは、作成した事はありません。
 
 ただ、このクラスを作成する事でtak さんのプログラム作成時間が短縮するのであれば
 賛成ですが・・・。
 
 
 >
 >また、そもそもVBAで階層を持たせたクラスの作成は可能でしょうか?
 >(私は階層のあるクラスを作成したことがありません。。。。ご教示ください。。)
 作成したオブジェクトの中でオブジェクトを扱うと言う事でしたら
 可能です。
 
 例えば、Thisworkbook.Worksheets("Sheet1")のような・・・・。
 
 
 >
 >===================================
 > クラス化
 >p:プロパティ cls:クラス M:メソッド
 >===================================
 >
 >クラス:会社
 > 会社名    P
 > 部署名        P
 > 社員(100)  cls
 > 売上        P
 > 会社名文字数 P (内部で算出)
 >
 >
 >クラス: 社員
 >     社員名  P
 >     入社年度  P
 >     社員数   P(内部で算出)
 >
 >
 
 以下は、一例ですが・・・。
 
 クラス名 ----会社
 モジュール
 
 '==========================================
 '私は、そのまま加工なしにプールするようなデータは、
 'Property・・・は、使いませんが・・・・。
 Public 会社名 As String
 Public 部署名 As String
 Public 売上 As Long
 Public 社員S As Collection
 '==========================================
 Private Sub Class_Initialize()
 Set 社員S = New Collection
 End Sub
 '==========================================
 Private Sub Class_Terminate()
 Set 社員S = Nothing
 End Sub
 '==========================================
 Sub add(Obj_社員 As 社員)
 社員S.add Obj_社員, Obj_社員.社員名
 End Sub
 '==========================================
 Sub delete(社員名 As String)
 社員S.Remove 社員名
 End Sub
 '==========================================
 Function 社員数() As Long
 社員数 = 社員S.Count
 End Function
 '==========================================
 Function 会社名文字数() As Long
 会社名文字数 = Len(会社名)
 End Function
 '
 '
 クラス名 ----社員
 モジュール
 '=========================================
 Public 社員名 As String
 Public 入社年度 As Long
 '今のところクラス社員は、上記のデータだけ
 
 
 なんて定義すると、プロシジャーMainで
 '====================================================
 Sub main()
 Dim shainmei
 Dim nyusha
 Dim o_会社 As 会社
 Dim o_社員 As 社員
 shainmei = Array("山田花子", "林家パー子")
 nyusha = Array(1990, 1980)
 '↑サンプルデータ作成
 Set o_会社 = New 会社
 With o_会社
 .会社名 = "ichinose"
 .部署名 = "お遊び部"
 .売上 = 1000
 For idx = LBound(shainmei) To UBound(shainmei)
 Set o_社員 = New 社員
 With o_社員
 .社員名 = shainmei(idx)
 .入社年度 = nyusha(idx)
 End With
 .add o_社員
 Next idx
 MsgBox .会社名 & "の社員数:" & .社員数
 MsgBox "林家パー子の入社年度:" & .社員S("林家パー子").入社年度
 MsgBox "クビにしたから削除します"
 .delete "林家パー子"
 MsgBox .会社名 & "の社員数:" & .社員数
 End With
 Set o_会社 = Nothing
 End Sub
 
 なんてコードが書けます。
 コレクションを使用すると追加・削除は簡単そうですが、
 コード記述時、オブジェクト社員のメンバ表示がされないのが難点です。
 
 MsgBox "林家パー子の入社年度:" & .社員S("林家パー子").入社年度
 
 の「.社員S("林家パー子").」を入力時に・・・。
 
 こういうことがしたいと言うことですか?
 
 |  |