PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやデータ分析などもやっています。

改行コードが埋め込まれているCSVファイルを読み込もう【VBA・エクセルマクロ】

CSVファイルを読み込むと、形が崩れる。

CSVファイルをエクセルに取り込む場合に、

エクセルなどのCSVリーダーアプリでは
リスト形式が保たれているのに、

CSVファイルをメモ帳で開くと、一行になっている」

これは、メモ帳側が改行コードを読み取れないことが原因で起こります。

これを解決するには、2つの方法が考えられます。

  1. VBAで改行コードまでを区切って配列に入れる。
  2. 配列を使わずに、UsedRangeプロパティなどを使用する。

VBAを使って解決してみよう!

ポイントを以下にまとめます。

  1. 改行コードまでを一括りにする。
  2. 一括りにしたデータをカンマで区切る。
Sub CSVReaderIncludeBreakLine()

    Dim Buffer As String
    Dim MyBreakLineArray, MyBreakLineArray2 As Variant
    Dim i As Long
    
    FileNamePath = "C:\Users\XXXXXXXX\Desktop\test.csv"

    Open FileNamePath For Input As #1
        Line Input #1, Buffer
    Close #1

     '「vbLf」が改行コード
    MyBreakLineArray = Split(Buffer, vbLf)
    
    '※ 文字列の最後が改行して終了する場合、ループは「-1」とします。
    For i = 0 To UBound(MyBreakLineArray) - 1 ' -- ※

        MyBreakLineArray2 = Split(MyBreakLineArray(i), ",")
        ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 1).Resize _
        (1, UBound(MyBreakLineArray2) + 1).Value = MyBreakLineArray2
    
    Next i
    
End Sub

UsedRangeプロパティを使用して解決してみる。

Sub UseUsedRange()

    Dim FilePath As String
    
    FilePath = "C:\Users\XXXXXXXX\Desktop\test.csv"
    
    If Dir(FilePath) <> "" Then
    
        Workbooks.Open FileName:=FilePath
        
        'CSVのシートネームは適宜変更してください。
        Set CSVSheetName = Worksheets("test")

        With CSVSheetName
        
            Yscale = .UsedRange.Rows.Count
            Xscale = .UsedRange.Columns.Count
            .Range(Cells(1, 1), Cells(Yscale, Xscale)).Copy _
            (ThisWorkbook.Worksheets("Sheet1").Range("A1"))
        
        End With
    
    End If
    
End Sub