Excelシートをテーブルとして、SQLで抽出
Const adOpenKeyset = 1 Const adLockReadOnly = 1 Private Sub getData() Dim dbCon As Object Dim dbRes As Object Dim dbCols As Object Dim strSQL As String ' 接続を確立する Set dbCon = CreateObject("ADODB.Connection") dbCon.Provider = "Microsoft.Jet.OLEDB.4.0" dbCon.Properties("Extended Properties") = "Excel 8.0" dbCon.Open ThisWorkbook.FullName ' テーブル名,条件を指定してレコードセットを取得する strSQL = "" strSQL = strSQL & " select" strSQL = strSQL & " *" strSQL = strSQL & " from" strSQL = strSQL & " [TBL1$]" strSQL = strSQL & " where" strSQL = strSQL & " pk = 001" Set dbRes = CreateObject("ADODB.Recordset") dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly wSheet1.Range("G2").CopyFromRecordset dbRes dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing End Sub
テーブル名は [シート名$] だそうで。
参照設定はしたくなかったので、CreateObjectしてます。
ただ、今回unionしたり、not exist したり、ネストしたSQLを組んだらメモリ喰いきった。
多分組んだSQLがヘボかったからだと思うけど、パフォーマンスってどうなんだろ。
TODO行き。