| 
    
     |  | 行き掛りですんで、ちょっと書きました。 
 私のやり方だとこんな感じ
 多分VB使いにはこちらの方がなじみ易いと思います。
 
 でも、私なら本当はこんな面倒なことはしません。
 Accessを使います。その方が工数は小、処理速度も速いはずです。
 Excelにデータがあったとしても、Accessに流し込んだほうが(私には)楽チン
 と思います。データの量の増大にも別段心配する必要もないし。
 
 Accessのない環境に配布の必要があるなら、mdbファイルとインターフェイス用に
 Excelでも使いますか。
 
 ※データを作るのが面倒なんで、ソースを書いたものの全く確認は
 してませんので悪しからず。まぁこんな感じという事でお願いします。
 '/////////////標準モジュール/////////////
 Sub test()
 Dim cls1 As New DatasClass
 
 cls1.AddRecords Worksheets("Sheet1").Range("A2:D10")
 Debug.Print cls1.RecCount
 End Sub
 
 '/////////////////DatasClass//////////////
 'データ管理用Class
 'テーブルの仕様に依存
 
 Private clsRec() As RecordClass
 Private mCol As Collection
 
 
 Private Sub Class_Initialize()
 Set mCol = New Collection
 End Sub
 
 'セル範囲を渡し、データをセットしてしまう。
 '面倒なので既にセットされた場合の確認は省略してます。
 '引数
 'pSh :DataTableのセル範囲
 Public Function AddRecords(pSh As Range)
 Dim i As Long, imax As Long
 Dim lcol As Long
 Dim r As Long  '行番号
 
 ReDim clsRec(pSh.Rows.Count)
 r = 0
 For i = 1 To pSh.Rows.Count
 Set clsRec(i) = New RecordClass
 With clsRec(i)
 r = r + 1
 .idInited = pSh.Range(r, lcol).Value
 .notNullCol = pSh.Range(r, lcol + 1).Value
 .ランク = pSh.Range(r, lcol + 2).Value
 .管理番号 = pSh.Range(r, lcol + 3).Value
 End With
 '管理番号をKeyにしてRecordClassのCollectionを作成
 mCol.Add clsRec(i), CStr(clsRec(i).管理番号)
 Next i
 End Function
 
 '管理番号を受け取り、該当のレコードの内容を返す
 '戻り値は配列変数
 'ユーザー定義で返したい場合は標準モジュールにpublicでユーザー定義必要
 Public Function GetData(pKanri As Long) As Variant
 Dim ret(3) As Long
 With mCol(pKanri)
 ret(0) = .idInited
 ret(1) = .notNullCol
 ret(2) = .管理番号
 End With
 
 End Function
 'レコード数を返す
 Public Function RecCount() As Long
 mCol.Count
 End Function
 'その他処理に必要な関数を作成
 
 '以下は手抜きしてます
 'Classのインスタンスを削除する処理
 'Collectionのインスタンスを削除する処理
 
 '/////////////RecordClass///////////Record格納用////////
 'テーブルの仕様に依存
 Private midInited As Boolean
 Private mnotNullCol As Long
 Private mCol管理番号 As Long
 Private mColランク As Long
 
 Public Property Let idInited(pData As Boolean)
 midInited = pData
 End Property
 Public Property Get idInited() As Boolean
 idInited = midInited
 End Property
 
 Public Property Let notNullCol(pData As Long)
 mnotNullCol = pData
 End Property
 Public Property Get notNullCol() As Long
 notNullCol = midInited
 End Property
 
 Public Property Let 管理番号(pData As Long)
 mCol管理番号 = pData
 End Property
 Public Property Get 管理番号() As Long
 管理番号 = mCol管理番号
 End Property
 
 Public Property Let ランク(pData As Long)
 mColランク = pData
 End Property
 Public Property Get ランク() As Long
 ランク = mColランク
 End Property
 
 |  |