QA@IT
«回答へ戻る

5599
 End Sub
 ```
 
-以下のようなCSVで期待通りに取り込まれました。
+以下のようなCSVで期待通り(全部で3行、1行目の一番右のセルには"h"が入っているし改行を含む要素はセル内で改行もされている)に取り込まれました。
 ```
 "011","b","c","d[CR][LF]
 e[CR][LF]

他の方の回答のQueryTablesの響きを見てそういやADOから取り込めたのを思い出したので試してみました。
完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的うまく取り込めるのではないかと思います。

Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"

    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")


    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")


    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")


    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long

    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1

        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub

以下のようなCSVで期待通り(全部で3行、1行目の一番右のセルには"h"が入っているし改行を含む要素はセル内で改行もされている)に取り込まれました。

"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。

とりあえずWin8.1 64bit, Excel 2013 32bit の環境では取り込めました。

他の方の回答のQueryTablesの響きを見てそういやADOから取り込めたのを思い出したので試してみました。
完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的うまく取り込めるのではないかと思います。

```
Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    
    
    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")
    

    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")

    
    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long
    
    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1
        
        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub
```

以下のようなCSVで期待通り(全部で3行、1行目の一番右のセルには"h"が入っているし改行を含む要素はセル内で改行もされている)に取り込まれました。
```
"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]
```

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。

とりあえずWin8.1 64bit, Excel 2013 32bit の環境では取り込めました。

5599
-完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的
-うまく取り込めるのではないかと思います。
+他の方の回答のQueryTablesの響きを見てそういやADOから取り込めたのを思い出したので試してみました。
+完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的うまく取り込めるのではないかと思います。
 
 ```
 Sub ImportCsvViaADO()
 
 先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
 難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。
+
+とりあえずWin8.1 64bit, Excel 2013 32bit の環境では取り込めました。

他の方の回答のQueryTablesの響きを見てそういやADOから取り込めたのを思い出したので試してみました。
完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的うまく取り込めるのではないかと思います。

Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"

    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")


    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")


    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")


    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long

    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1

        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub

以下のようなCSVで期待通りに取り込まれました。

"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。

とりあえずWin8.1 64bit, Excel 2013 32bit の環境では取り込めました。

他の方の回答のQueryTablesの響きを見てそういやADOから取り込めたのを思い出したので試してみました。
完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的うまく取り込めるのではないかと思います。

```
Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    
    
    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")
    

    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")

    
    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long
    
    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1
        
        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub
```

以下のようなCSVで期待通りに取り込まれました。
```
"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]
```

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。

とりあえずWin8.1 64bit, Excel 2013 32bit の環境では取り込めました。

回答を投稿

完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的
うまく取り込めるのではないかと思います。

Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"

    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")


    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")


    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")


    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long

    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1

        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub

以下のようなCSVで期待通りに取り込まれました。

"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。

完璧かどうかはわかりませんが、Jetエンジンを利用して取り込めば比較的
うまく取り込めるのではないかと思います。

```
Sub ImportCsvViaADO()

    Dim strPath As String
    Dim strFilename As String
    strPath = "C:\path\to\csv\"
    strFilename = "abc.csv"
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    
    
    Dim oAdoCon As Object
    Set oAdoCon = CreateObject("ADODB.Connection")
    

    Call oAdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";" _
                    & "Extended Properties='Text;HDR=NO'")

    
    Dim oRS As Object
    Set oRS = oAdoCon.Execute("SELECT * FROM " & strFilename)


    Dim oVal As Object
    Dim rowIndex As Long
    Dim colIndex As Long
    
    rowIndex = 1
    Do Until oRS.EOF
        colIndex = 1
        For Each oVal In oRS.Fields
            sh.Cells(rowIndex, colIndex).Value = oVal
            colIndex = colIndex + 1

            Set oVal = Nothing
        Next
        rowIndex = rowIndex + 1
        
        oRS.MoveNext
    Loop

    Set oRS = Nothing
    Set oAdoCon = Nothing

    Set sh = Nothing
End Sub
```

以下のようなCSVで期待通りに取り込まれました。
```
"011","b","c","d[CR][LF]
e[CR][LF]
f[CR][LF]
g","h"[CR][LF]
"0あいう","示","c"[CR][LF]
"0[CR][LF]
1[CR][LF]
1","c"[CR][LF]
```

先頭のゼロはそのままでも残るようでしたが、心配でしたら実行前にテキスト書式にしてしまえばよいかと。
難点を言えば、64bit版のOffice(OSではなくてOfficeが64bit版か否か)だと動かないかもしれない点ですかね。