CSV → シート → 配列 → CSV に変換して確認

CSV → シート → 配列 → CSV と順番に変換して、元のCSVに戻っているか確認しました。

Sub CSVtoSheetToArrayToCSV()
    
    ' 【Step 1】CSVファイルをExcelシートに読み込む
    Dim fileName As String
    ' 読み込むCSVファイルのフルパスを指定
    fileName = "C:\TEMP\sample2.csv"
    ' Power Queryを使用してCSVを"csvList"シートに読み込む
    Call csv_to_sheet_PowerQuery(fileName)
    
    ' 【Step 2】Excelシートのデータを配列に変換する
    Dim arr As Variant
    ' シート"csvList"からデータを配列へ格納する
    ' 第3引数に1を指定して1行目をスキップ(ヘッダー行を除外)
    Call sheet_to_array("csvList", arr, 1)
    
    ' 【Step 3】配列のデータを新しいCSVファイルに書き出す
    fileName = "C:\TEMP\サンプル出力PQ.csv"
    ' 配列のデータを指定されたパスにCSV形式で保存
    Call array_to_csv_Excel_r1(arr, fileName)
    
End Sub

各プロセスの詳細

【Step 1】CSVファイルをExcelシートに読み込む

  • 使用されているcsv_to_sheet_PowerQueryは、Power Queryを利用してCSVファイルを指定したExcelシートに取り込むサブプロシージャ。
  • fileName変数に読み込むCSVファイルのパスを指定して渡します。
  • 詳細な動作は、csv_to_sheet_PowerQueryプロシージャ内で定義されています。以下参照。

【Step 2】Excelシートのデータを配列に変換する

  • sheet_to_arrayは、指定されたシートのデータを配列に変換するサブプロシージャ。
  • 第3引数に1を渡すことで、配列に格納する際にシートの1行目をスキップします。これにより、ヘッダー行を除外してデータのみを処理できます。
  • sheet_to_arrayは、以下参照。

【Step 3】配列のデータを新しいCSVファイルに書き出す

  • array_to_csv_Excel_r1は、配列内のデータを指定されたパスにCSV形式で保存するサブプロシージャ。
  • 配列からCSV形式への変換やファイル書き出し処理がこのプロシージャ内で行われます。
  • array_to_csv_Excel_r1は、以下参照。

処理時間

処理時間を測定するため、マクロを以下に変更しました。

Sub CSVtoSheetToArrayToCSV()

    ' 処理時間測定
    Dim 開始時刻 As Double
    開始時刻 = Timer
    Dim clm As Long
    clm = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column + 1
    Dim rw As Long: rw = 1
    Sheet1.Cells(rw, clm) = "処理時間"
    rw = rw + 1
    
    
    ' 【Step 1】CSVファイルをExcelシートに読み込む
    Dim fileName As String
    ' 読み込むCSVファイルのフルパスを指定
    ' 15,345kB、26531行、65列
    fileName = "C:\TEMP\重いファイル.csv"
    ' Power Queryを使用してCSVを"csvList"シートに読み込む
    Call csv_to_sheet_PowerQuery(fileName)
    
    
    ' 処理時間測定
    Sheet1.Cells(rw, clm) = (Timer - 開始時刻)
    rw = rw + 1
    
    
    ' 【Step 2】Excelシートのデータを配列に変換する
    Dim arr As Variant
    ' シート"csvList"からデータを配列へ格納する
    ' 第3引数に1を指定して1行目をスキップ(ヘッダー行を除外)
    Call sheet_to_array("csvList", arr, 1)
    
    
    ' 処理時間測定
    Sheet1.Cells(rw, clm) = (Timer - 開始時刻)
    rw = rw + 1
    
    
    ' 【Step 3】配列のデータを新しいCSVファイルに書き出す
    fileName = "C:\TEMP\サンプル出力PQ.csv"
    ' 配列のデータを指定されたパスにCSV形式で保存
    Call array_to_csv_Excel_r1(arr, fileName)
    
    
    ' 処理時間測定
    Sheet1.Cells(rw, clm) = (Timer - 開始時刻)
    rw = rw + 1
    
End Sub

15,345kB、26531行、65列の CSVファイルを処理した結果が以下です。平均で、16秒程度で処理できました。

速度的にも問題なく、万能の処理方法です。配列に入れた段階で処理して、処理された配列を、CSV に変換する方法で、マクロを組むことで、高速処理が可能になります。ぜひ、試してみてください。

Follow me!

CSV

前の記事

CSVの読込は Power Query が万能