CSVファイルを読み込む
CSVファイルを開こうとするとExcelで直接開きます。
VBAでExcelシートに読み込む方法もいくつかありますが、単純にExcelで読込んだ後でシートをコピーするのが一番確実で簡単な方法だと思います。
テキストファイルを読み込むように一行づつ処理する方法もありますが、この場合1項目内で改行が含まれている場合などは上手くいかない事もあります。
一旦Excelで読み込んでしまえば、そのような不具合もなく項目内の改行も正しく読み込んでくれます。
プログラムコード
今回は、プロシージャを2つに分けて書いてみます。ひとつはファイルダイアログを開いてファイルパスを取得し、もう一つはシートに値を読み込む処理です。
ファイルダイアログを出してファイルパスを得る
Sub FileOpen_Click()
Dim FileName As String
FileName = Application.GetOpenFilename("CSVファイル,*.CSV")
If FileName <> "False" Then
LoadCSVFile FileName
Else
MsgBox "キャンセルしました。"
End If
MsgBox "終了しました。"
End Sub
ファイルピックアップダイアログは、Application.GetOpenFilenameで取得できます。
引数には、ファイルの種類を指定しています。キャンセルした場合は、Falseが返りますので、それ以外であればファイルを読み込みに行きます。
CSVファイルをシートに読み込む
Sub LoadCSVFile(ByVal fn As String)
Dim ws As Worksheet
Set ws = Worksheets("data") '読込むシートを指定
Application.ScreenUpdating = False
ws.Cells.Clear 'それまでのデータをクリアします。
Workbooks.Open FileName:=fn
ActiveSheet.Cells.Copy ws.Cells
ActiveWorkbook.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub
CSVファイルを読み込むプロシージャでは引数で、先ほどのファイルパスを受け取ります。ファイルパスはフルパスになります。
最初に読み込み先のシートを指定し、その後そのシートを空の状態にしています。今回は「data」というシートを用意し、そこに読み込むようにします。
次にCSVファイルをオープンしてExcelファイルとして読込み、それを dataシートにコピーします。コピーが終わったら開いたファイルを保存せずに閉じています。
ちなみに開いたファイルはアクティブになっていますので、ActiveWorkbook.CloseとしてやればOKです。
Application.ScreenUpdating = False と
Application.ScreenUpdating = True で囲んでいるのは、それまでの処理がちらついて表示されないようにしています。(これで多少速度も上がります。)
あとはdataシートから必要なデータ抜き出すなり加工するなり好きに作業すれば良いでしょう。不要になったら Cells.Clearで消しておくと良いでしょう。
最後に
CSVファイルを読み込むコードは、色々ありますがこの方法が最も簡単で確実だと感じました。プログラムの練習として他の方法を試してみるのもアリだと思いますが、開発のために時間をかけたくないのであれば、このような定番の方法をストックしておくのも良いでしょう。