前提・実現したいこと
ExcelVBAでADODB.Recordsetを利用してデータを収集、加工して出力を行います。
CopyFromRecordsetする際に、RecordsetのField順が例えば「ID,日付,数量,金額」となっている場合、「ID,数量,金額,日付」となるようにRecordsetの順番を変える、
もしくは編集したRecordsetに対し、「SELECT ID,数量,金額,日付 FROM [hoge.csv] 」のようなSQLで列名を指定して出力するなどできるでしょうか。
該当のソースコード
vba
1Option Explicit 2 3'参照設定:Microsoft ActiveX Data Objects 6.1 Library 4#Const REF_CSVOperator = True 'プリプロセッサディレクティブ '参照設定しない場合はFalse 5 6#If REF_CSVOperator Then 7 Dim adoConn As ADODB.Connection 8 Dim adoRs As ADODB.Recordset 9 Dim FSO As FileSystemObject 10#Else 11 Dim adoConn As Object 12 Dim adoRs As Object 13 Dim FSO As Object 14#End If 15 16Private mCSVPath As String 17 18Private Sub Class_Initialize() 19 Set adoConn = CreateObject("ADODB.Connection") 20 Set adoRs = CreateObject("ADODB.Recordset") 21 Set FSO = CreateObject("Scripting.FileSystemObject") 22End Sub 23 24Public Property Let CSVPath(Path As String, Header As Boolean) 25 mCSVPath = Path 26 With adoConn 27 .Provider = "Microsoft.ACE.OLEDB.12.0" 28 If Header Then 29 .Properties("Extended Properties") = "Text;HDR=Yes;FMT=Delimited" 30 Else 31 .Properties("Extended Properties") = "Text;HDR=No;FMT=Delimited" 32 End If 33 .Open FSO.GetParentFolderName(mCSVPath) & "\" 34 35 Set adoRs = .Execute("SELECT * FROM [" & FSO.GetFileName(mCSVPath) & "]") 36 End With 37End Property 38 39Public Sub CopyFromRecordset(ByRef rng As Range) 40 rng.CopyFromRecordset adoRs 41End Sub 42 43Private Sub Class_Terminate() 44 On Error Resume Next 45 adoRs.Close: Set adoRs = Nothing 46 adoConn.Close: Set adoConn = Nothing 47 On Error GoTo 0 48End Sub 49
補足情報(FW/ツールのバージョンなど)
参照設定:Microsoft Scripting Runtime, Micorosoft ActiveX Data Objects 6.1 Library
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。