|
行き掛りですんで、ちょっと書きました。
私のやり方だとこんな感じ
多分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
|
|