CSVファイルのデータを加工しながらエクセルに読み込む

2022年4月3日

CSVファイルの内容をExcelファイル上に持ってくるだけでしたらCSVファイルをエクセル上にドラッグ&ドロップするだけでできますが、CSVファイルの内容を加工しながらエクセル上に読み込むには今回のサンプルアプリのようにVBAでプログラミングする必要があります。今回はエクセルにCSVファイルを読み込むサンプルアプリを紹介します。毎回同じ作業をするのであればExcel上に取り込んでからデータを加工するより正確で効率よく作業を行うことができます。

CSVファイルを読み込むサンプルアプリの説明

以下にある読込み用のCSVファイルを用意します。
 —— CSVSample.csv ———–
 社員番号,氏名,注文個数,単価
 10001,山田太郎,5,350
 10002,小林花子,2,180
 10003,佐藤一郎,3,200
 10004,田中五郎,4,550
 10005,林浩司,2,330
 ——————————————

「CSV取込み」ボタンをクリックすると、上記CSVファイルを読み込む際に 個数×単価 を計算し、合計列を追加してExcel にデータを読み込むことができます。

サンプルアプリのソースコード  コードの作成手順はこちら

今回の記事とは別に「CSVファイルの特定の箇所をExcelに読込む」というタイトルでCSVファイルの取り込み方法を紹介している記事がありますので下記リンク先も参照ください。
 https://scodebank.com/?p=754

Sub ボタン1_Click()

   '変数を定義する
    Dim buf  As String, tmp As Variant, i As Long
    
    'エクセルシートの5行目からCSVデータをセットする
    i = 5
   'CSVSample.csv ファイルの場所を指定
    Open "D:\CSVSample.csv" For Input As #1

   'CSVデータがなくなるまでループ
       Do Until EOF(1)        
           'CSVデータの1行目を読込む
            Line Input #1, buf

            'カンマでデータを分解して配列変数「tmp」にデータをセットする
            tmp = Split(buf, ",")
            
         'タイトル行の5列目に「合計」という文字を入れる
      'タイトル行の処理
            If i = 5 Then
              '配列を一つ増やして合計列を追加する
              ReDim Preserve tmp(4)
              tmp(4) = "合計"
              Cells(i, 2).Resize(1, UBound(tmp) + 1).Value = tmp
            
           '2行目以降のデータ行の処理
            Else
              '配列を一つ増やして合計列を追加
              ReDim Preserve tmp(4)
              '個数×単価で合計を求めて5列目に合計値をセット
              tmp(4) = Val(tmp(2)) * Val(tmp(3))
              'Resize(変更後の行数, 変更後の列数)を設定してセルに値をセット
              Cells(i, 2).Resize(1, UBound(tmp) + 1).Value = tmp
            End If
      
           '次の行を指定
            i = i + 1
       Loop
        
    'CSVファイルを閉じる
    Close #1
    
End Sub