興味のある方は、このコード(Analyst Caveのコードに基づいています)はVBAでSQLを使用するのに最適です。サブとして次を保存します。
Option Explicit
Sub QuerySQL(result_location As Range, query As String)
Dim ResultWS As Worksheet
Set ResultWS = ThisWorkbook.Sheets("Query Results")
ResultWS.Cells.ClearContents
If query = "" Then Exit Sub
Dim cn As Object, rs As Object
'Add to the workbook a database connection with itself
'Note other ConnectionString could be used to access a variety of media
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
.Open
End With
'Build and execute the SQL query
Set rs = cn.Execute(query)
If rs.EOF = True Then Exit Sub
'Print column labels
Dim i As Long, j As Long
For i = 0 To rs.Fields.Count - 1
result_location.Offset(0, i).Value = rs.Fields(i).Name
Next i
'Print column contents
i = 0
Do
For j = 0 To rs.Fields.Count - 1
result_location.Offset(i + 1, j).Value = rs.Fields(j).Value
Next j
rs.MoveNext
i = i + 1
Loop Until rs.EOF
'Close the connections
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
それを使用するには、次の手順を実行します。
Dim myQuery As String
myQuery = "SELECT * FROM [Sheet2$]"
Call QuerySQL(ThisWorkbook.Sheets("Sheet1").Range("A1"), myQuery)
それはMS AccessのスタイルSQLを使用しています。上記では、Sheet2をテーブルとして検索し、A1で始まる結果をSheet1に印刷します。
この場合、ConnectionStringのサンプルを提供できますか?それが機能するには、それを操作する必要があるかもしれません。 – wdosanjos
ワークブックがディスクに保存されていない場合は、この方法を使用できません。あなたができるベストは、一時的なコピーをディスクに保存してそれを照会することです。 –
@wdosanjos現在の接続文字列はThisWorkbook.Pathと.Nameを使用しますが、ファイルが保存されていないためパスがない場合はどうすればよいでしょうか? –