Excel VBAでファイル取込み!CSVファイル編
こんばんは。
nanana-blog管理人のナナナです。
ブログを訪問し記事を読んでいただきありがとうございます。
会社の仕事でCSVファイルをExcelに取込んで処理をする機会は多いのではないでしょうか。
定型業務であれば同じファイル形式のなのでVBAで取込み処理を作成しておくと時間短縮になります。
本日はExcel VBAでCSVファイルを取り込むサンプルを紹介します。
CSVファイルを取り込むサンプルVBA
Excelにボタンを作成して、ボタンを押すと特定のCSVファイルの内容をExcelに取込むVBAプログラムのサンプルです。
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のVBAでCSVファイルを取り込む手順を紹介しました。
システムからデータを出力する時、ファイル形式がCSVであることは多いです。
同じCSVを何度も取り込む場合はVBAを作成しておくと時間短縮になるので参考にしてみてください。