マクロだけに固執するのではなく、少しの vba を利用したい場合は、次の方法が役立ちます。このモジュールは、スローされた SQL を受け取り、Excel ワークシートの定義された場所にエクスポートします。モジュールの後に 2 つの使用例があります。1 つは完全に新しいワークブックを作成するためのもので、もう 1 つは既存のワークブックを開くためのものです。SQL の使用に自信がない場合は、必要なクエリを作成して保存し、「SELECT * FROM [YourQueryName]」を QueryString パラメータとして Sub に指定します。
Sub OutputQuery(ws As excel.Worksheet, CellRef As String, QueryString As String, Optional Transpose As Boolean = False)
Dim q As New ADODB.Recordset
Dim i, j As Integer
i = 1
q.Open QueryString, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
If Transpose Then
For j = 0 To q.Fields.Count - 1
ws.Range(CellRef).Offset(j, 0).Value = q(j).Name
If InStr(1, q(j).Name, "Date") > 0 Or InStr(1, q(j).Name, "DOB") > 0 Then
ws.Range(CellRef).Offset(j, 0).EntireRow.NumberFormat = "dd/mm/yyyy"
End If
Next
Do Until q.EOF
For j = 0 To q.Fields.Count - 1
ws.Range(CellRef).Offset(j, i).Value = q(j)
Next
i = i + 1
q.MoveNext
Loop
Else
For j = 0 To q.Fields.Count - 1
ws.Range(CellRef).Offset(0, j).Value = q(j).Name
If InStr(1, q(j).Name, "Date") > 0 Or InStr(1, q(j).Name, "DOB") > 0 Then
ws.Range(CellRef).Offset(0, j).EntireColumn.NumberFormat = "dd/mm/yyyy"
End If
Next
Do Until q.EOF
For j = 0 To q.Fields.Count - 1
ws.Range(CellRef).Offset(i, j).Value = q(j)
Next
i = i + 1
q.MoveNext
Loop
End If
q.Close
End Sub
例 1:
Sub Example1()
Dim ex As excel.Application
Dim wb As excel.Workbook
Dim ws As excel.Worksheet
'Create workbook
Set ex = CreateObject("Excel.Application")
ex.Visible = True
Set wb = ex.Workbooks.Add
Set ws = wb.Sheets(1)
OutputQuery ws, "A1", "Select * From [TestQuery]"
End Sub
例 2:
Sub Example2()
Dim ex As excel.Application
Dim wb As excel.Workbook
Dim ws As excel.Worksheet
'Create workbook
Set ex = CreateObject("Excel.Application")
ex.Visible = True
Set wb = ex.Workbooks.Open("H:\Book1.xls")
Set ws = wb.Sheets("DataSheet")
OutputQuery ws, "E11", "Select * From [TestQuery]"
End Sub
それがあなたに役立つことを願っています。