SELECT DISTINCTを使うと、少し負荷が大きいようで時間がかかります
重複削除は、Dictionaryが最速だと思うのですが
Dim myArray As Variant
yname = Environ("UserProfile") 'ユーザー名を取得
strFileName = "管理元帳.accdb" 'データベースのファイル名
Set adoCn = CreateObject("ADODB.Connection") 'ADODBコネクションオブジェクトを作成
adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & yname & "\Desktop\案件\職業紹介業\職業紹介必要書類\提出分\" & strFileName & ";" 'Accessファイルに接続
Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
strSQL = "SELECT 案件番号 FROM temp ;"
Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
adoRs.CursorLocation = adUseClient 'adUseServer(デフォルト)をCursorLocationに変更す
adoRs.Open strSQL, adoCn, Options:=adCmdTableDirect
FlCnt = adoRs.Fields.Count
RcCnt = adoRs.RecordCount
ReDim myArray(FlCnt, RcCnt) '二次元配列を再定義
myArray = adoRs.GetRows
x = 0
Dim nbDic As Object
Set nbDic = CreateObject("Scripting.Dictionary")
For i = 0 To RcCnt - 1
If nbDic.exist(myArray(0, i)) = False Then 'ここでエラー
x = x + 1
End If
Next
MsgBox x
エラー 438 オブジェクトはこのプロパティまたはメソッドをサポートしていません
となるのですが、回避してDictionaryを使用する方法はあるのでしょうか?
原因が分かりました
.Existsでした
sが抜けてました
「重複のないデータを取得する」とのことですが、件数を取得するということでいいのでしょうか。
提示のコードは常に全データ件数になり、重複も含む件数になると思いますが。
件数を取得するなら下記のようなコードになると思います。
重複をチェックするフィールドに インデックス(重複あり) を設定してありますか。
もし設定してないなら、設定すると飛躍的に速度は改善すると思います。
上記の投稿は私の投稿です。出先でログインせずに投稿してしまいました。