名前なし
2025/11/27 (木) 14:26:53
40184@3d35d
「重複のないデータを取得する」とのことですが、件数を取得するということでいいのでしょうか。
提示のコードは常に全データ件数になり、重複も含む件数になると思いますが。
'前略
ReDim myArray(FlCnt, RcCnt) '二次元配列を再定義
myArray = adoRs.GetRows '全レコードを配列として取得
x = 0
Dim nbDic As Object
Set nbDic = CreateObject("Scripting.Dictionary") 'Dictionaryを生成、Dictionaryの中身は空
For i = 0 To RcCnt - 1
If nbDic.exists(myArray(0, i)) = False Then '空のDictionary内にデータがあるか確認
'空なので存在するはずがない、常にFalse
x = x + 1
End If
Next
MsgBox x
件数を取得するなら下記のようなコードになると思います。
'前略
ReDim myArray(FlCnt, RcCnt) '二次元配列を再定義
myArray = adoRs.GetRows '全レコードを配列として取得
Dim nbDic As Object
Set nbDic = CreateObject("Scripting.Dictionary") 'Dictionaryを生成、Dictionaryの中身は空
For i = 0 To RcCnt - 1
nbDic(myArray(0, i)) = myArray(0, i) 'データ配列の1列目をDictionaryに格納
’重複データは上書きされる
Next
MsgBox nbDic.Count ’件数を表示
SELECT DISTINCTを使うと、少し負荷が大きいようで時間がかかります
重複をチェックするフィールドに インデックス(重複あり) を設定してありますか。
もし設定してないなら、設定すると飛躍的に速度は改善すると思います。
通報 ...
上記の投稿は私の投稿です。出先でログインせずに投稿してしまいました。