2017-12-06 11 views
-1

セミコロンで区切られたCSVファイルをインポートしようとしています ";"私は後でそれを使用することができますので、Excelのオブジェクトに。VBA、CSV分割をインポートする ";" to sheet

理想的には、ADO、DAO、またはADODBを使用したいので、オブジェクトに対してSQLクエリを実行し、特定のフィールドの合計、またはフィールドの総数などを得ることができます。

これまでのところ、私は以下のコードを取得しましたが、データを ";"で分割しないため、処理できる複数のフィールドの代わりに1つのフィールドに戻ります。

Sub Import() 
    Dim conn As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Dim f As ADODB.Field 

    Dim csvName, csvPath 

    csvPath = ActiveWorkbook.path 
    csvName = "fileName.csv" 

    conn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & csvPath & ";" 
    rs.Open "SELECT * FROM " & csvName, conn, adOpenStatic, adLockReadOnly, adCmdText 

    Debug.Print rs.Fields 

    While Not rs.EOF 
     For Each f In rs.Fields 
     Debug.Print f.Name & "=" & f.Value 
     Next 
    Wend 
End Sub 

どのようにしてデータを分割することもできますか? SQLクエリを使用してクエリを実行しますか?または、CSVを読み込んで特定の列を照会できる別のオブジェクト。ここで

+0

Excelの場合は、 –

+0

としてください、ありがとうございました! –

+0

私はあなたがここであなたの答えをすべて持っていると思います:https://stackoverflow.com/a/11267603/78522 –

答えて

2

は例です:

Public Sub QueryTextFile() 

    Dim rsData As ADODB.Recordset 
    Dim sConnect As String 
    Dim sSQL As String 

    ' Create the connection string. 
    sConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
       "Data Source=C:\Files\;" & _ 
       "Extended Properties=Text;" 

    ' Create the SQL statement. 
    sSQL = "SELECT * FROM Sales.csv;" 
    Set rsData = New ADODB.Recordset 
    rsData.Open sSQL, sConnect, adOpenForwardOnly, _ 
       adLockReadOnly, adCmdText 

    ' Check to make sure we received data. 
    If Not rsData.EOF Then 
     ' Dump the returned data onto Sheet1. 
     Sheet1.Range("A1").CopyFromRecordset rsData 
    Else 
     MsgBox "No records returned.", vbCritical 
    End If 

    ' Clean up our Recordset object. 
    rsData.Close 
    Set rsData = Nothing 

End Sub 
+0

こんにちはJohny、ありがとうございますが、データを正しく分割していません。 CSVファイルは「;」で区切られていますので、ご注意ください。 –

+0

[こちら](https://www.connectionstrings.com/textfile/)と[this](https://www.codeproject.com/Articles/26822/Read-Text-File-txt-csv- log-tab-fixed-length)を使用して区切りパラメータを設定します。 – JohnyL

0

私はそれが使用可能だった唯一の答えは、現在のフォルダ内のiniファイルを作成し、iniファイル内の区切り文字を入力することでした。

iniPath = activeworkbook.path & "\" 
iniName = "schema.ini" 
iniPathName = iniPath & iniName 
If Not fso.FileExists(iniPathName) Then 
    fso.CreateTextFile (iniPathName) 
End if