【Access】 SQLをエクセルに出力する関数
コピペすれば使えるモジュールをがちゃがちゃと作っているんですが、そのうちのひとつとしてエクセルに出力する汎用モジュールの公開。
Excelオブジェクトなどの参照設定は一切不要です。引数としてSQL,ファイルのフルパス、オートフィルタのONをTrueかfalseで渡します。
Function ex_output(SQL As String, file_name As String, A_fil As Boolean) 'SQLをエクセルに出力する関数 Dim cn As New ADODB.Connection Dim ars As New ADODB.Recordset Dim rs As ADODB.Recordset Dim xls As Object Dim wkb As Object Dim mysheet As Object Dim IDX As Long Set cn = CurrentProject.Connection Set xls = CreateObject("Excel.Application") Set wkb = xls.Workbooks.Add Set mysheet = wkb.Worksheets(1) 'rs.Open SQL, cn, adOpenKeyset, adLockReadOnly Set rs = cn.Execute(SQL) '列見出しを書き出す For IDX = 1 To rs.Fields.count '列名にスペースが入っているものを書き出すためのReplace mysheet.cells(1, IDX).Value = Replace(rs.Fields(IDX - 1).Name, ";nbsp;", " ") mysheet.cells(1, IDX).Interior.ColorIndex = 20 Next mysheet.Range("A2").CopyFromRecordset rs 'オートフィルターをつける If A_fil = True Then mysheet.Range("A1").AutoFilter End If '列幅を整える For IDX = 1 To rs.Fields.count mysheet.Columns(IDX).AutoFit Next wkb.SaveAs FileName:=file_name, Password:="password" wkb.Close SaveChanges:=False 'Excelへの変更保存をキャンセル xls.Quit 'Excel終了 xls.DisplayAlerts = True 'メッセージの復旧 'オブジェクトの開放 Set wkb = Nothing Set xls = Nothing rs.Close: cn.Close file_name = "" '終了通知 'msgbox "Export has done!" ex_output = True End Function