SQL文を使って抽出を行う

SQL文を使って抽出を行う

Sub 抽出2()
'SQL文で抽出
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String
Dim mySQLArray(2) As String, i As Integer

FileName = ThisWorkbook.Path & "\xls\DataBook.xls"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" & _
           "Data Source=" & FileName

'SQL文で記した抽出条件
mySQLArray(0) = "select * from [伝票一覧$] where 担当者 ='星野';"
mySQLArray(1) = "select * from [社員] where 所属 ='営業1課';"
mySQLArray(2) = "SELECT 伝票メモ.伝票No,商品.商品名,伝票メモ.販売数,商品.商品単価 " & _
                "FROM 伝票メモ INNER JOIN 商品 ON 伝票メモ.商品ID = 商品.商品ID " & _
                "ORDER BY 伝票メモ.伝票No;"

'Recordset オブジェクトに「伝票一覧」シートの内容を読み込む

For i = 0 To UBound(mySQLArray)
  'SQLステートメントを使用してRecordset オブジェクトを開く
  myRS.Open mySQLArray(i), myCon
  'シートごとに抽出内容を転記
  Worksheets(i + 1).Range("A1").CopyFromRecordset myRS
  '別の内容を扱うのでRecordset オブジェクトをいったん閉じる
  myRS.Close
Next

Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub

◆Sheet1

◆Sheet2

◆Sheet3

SQL文を使用すれば、高度な抽出条件もコード内で動的に作成することが可能。
AuroFilter メソッドやAdvancedFilter メソッドではできなかった「結合」の処理が簡単にできる。