PeaceJet

証券会社で証券外務員をやりながら、マーケティングやデータ分析・UI/UX改善などを行っています。

改行コードが埋め込まれている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
広告を非表示にする