Excel VBAでファイル取込み!CSVファイル編

ディスプレイイラスト

こんばんは。

 

nanana-blog管理人のナナナです。

 

ブログを訪問し記事を読んでいただきありがとうございます。

 

会社の仕事でCSVファイルをExcelに取込んで処理をする機会は多いのではないでしょうか。

定型業務であれば同じファイル形式のなのでVBAで取込み処理を作成しておくと時間短縮になります。

本日はExcel VBAでCSVファイルを取り込むサンプルを紹介します。

 

 

 
 

 

CSVファイルを取り込むサンプルVBA

Excelにボタンを作成して、ボタンを押すと特定のCSVファイルの内容をExcelに取込むVBAプログラムのサンプルです。

CSVファイルデータ

取込みファイル
Sub ボタン1_Click()
    Dim intFF As Integer
    Dim strData As String
    Dim arrData As Variant
    Dim IX As Long
    Dim checkFile As String
    Dim SorceFilePath As String
    
    SorceFilePath = "D:\temp\Dep.csv"
    
    checkFile = Dir(SorceFilePath)
    If checkFile = "" Then
        MsgBox "指定したファイルが存在しません。"
        Exit Sub
    End If
   
   
    intFF = FreeFile
    IX = 1
    Open SorceFilePath For Input As #intFF
        Do While Not EOF(intFF)
            Line Input #intFF, strData
           
            strData = Replace(strData, """", "")
            arrData = Split(strData, ",")
           
            ThisWorkbook.Worksheets("Sheet2").Cells(IX, 1) = arrData(0)
            ThisWorkbook.Worksheets("Sheet2").Cells(IX, 2) = arrData(1)
            ThisWorkbook.Worksheets("Sheet2").Cells(IX, 3) = arrData(2)
           
            IX = IX + 1
        Loop
       
    Close #intFF
   
End Sub

 

 

 

VBAの解説 

SorceFilePath = "D:\temp\Dep.csv"

 変数「SorceFilePath」に取込みたいCSVファイルのパスを格納します。

サンプルではDドライブのtempフォルダにある「Dep.csv」ファイルを取込みます。

 

checkFile = Dir(SorceFilePath)

Dir関数を使用して取り込みファイルが存在しているかを確認しています。

Dir関数はファイルが存在していると戻り値がファイル名で、存在していないと戻り値が「""(空文字)」になります。

 

    
If checkFile = "" Then
    MsgBox "指定したファイルが存在しません。"
    Exit Sub
End If

 Dir関数の戻り値が空文字だった場合は、メッセージを表示させて処理を終了します。

 

 

intFF = FreeFile

 Openメソッドで使用するファイル番号を取得します。

 

Open SorceFilePath For Input As #intFF

Openメソッドを使用してDep.csvファイルを開きます。

Inputの部分には他にも以下のような値を入れることができます。

 

説明
Append 追記モード
Binary バイナリーモード
Input 読取りモード
Output 上書きモード
Random ランダムアクセスモード

 

Do While Not EOF(intFF)

取り込みファイルの最終行までDoからLoop間の処理を繰り返し処理します。 

 

Line Input #intFF, strData

 取込みファイルのを行単位で関数strDataへ格納します。

 

 strData = Replace(strData, """", "")

サンプルのCSVはダブルクォーテーション(”)で値を囲んでいるため、Replace関数を使ってダブルクォーテーション削除します。

 

arrData = Split(strData, ",")

Split関数を使って各項目を配列に格納します。

項目間の区切り文字はカンマ(,)なのでSplit関数の第2引数にカンマを指定します。

    
ThisWorkbook.Worksheets("Sheet2").Cells(IX, 1) = arrData(0)
ThisWorkbook.Worksheets("Sheet2").Cells(IX, 2) = arrData(1)
ThisWorkbook.Worksheets("Sheet2").Cells(IX, 3) = arrData(2) 

Excelに取得した値を追記していきます。

VBAを実行しているブックのシート名「Sheet2」に値を入力していきます。

IXにはセルの行番号が入ります。

サンプルファイルの19行目でIX=1と指定しているので、1行目から順番に値を追記していきます。

 

IX = IX + 1

次のデータのためにIXの値に1を足します。

 

Close #intFF

全てのデータを追記し終わったら、ファイルを閉じます。 

 

処理結果は次のようになります。

Excelシート

 

 

最後に

いかがだったでしょうか。

本日はExcelのVBAでCSVファイルを取り込む手順を紹介しました。

システムからデータを出力する時、ファイル形式がCSVであることは多いです。

同じCSVを何度も取り込む場合はVBAを作成しておくと時間短縮になるので参考にしてみてください。

 

www.nanana-blog.com

 

www.nanana-blog.com

 

www.nanana-blog.com

 

www.nanana-blog.com