CSVをExcelをして開く
CSVとは、Comma Separated Valuesの略で、カンマで区切られた値という意味です。
Excelで開けば一つ一つの値がセルに入って表示されますが、メモ帳などで開くと、「,」で区切られたデータとして確認することができます。
そんなCSVをVBAで開く方法としては、「Excelで開く」という作業と全く同じように開くという方法が考えられます。
Sub OpenCSVasExcelFile()
Dim FileName As Variant
FileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv")
If varFileName = False Then Exit Sub
Workbooks.Open Filename:=FileName
ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells
ActiveWorkbook.Close False
End Sub
CSVをExcelファイルで開き、その内容をExcelファイルにコピーするという指示です。
ただ、この方法だと、例えば「頭の0」が飛んでしまったり、「3-2」という値が「3月2日」として読み込まれたりという弊害が起きます。
読み込まれた値の型を、Excel側が勝手に認識してしまうためです。
Open For Inputで読み込む
最もよくあるパターン
そこで、別の方法でCSVを読み込むことが考えられます。
具体的には、次のようなコードを用います。
Sub OpenCSVBasic()
Dim FileName As Variant
Dim bufRec As String
Dim bufSplit() As String
Dim i As Long, j As Long
FileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv")
If FileName = False Then Exit Sub
Open FileName For Input As #1
i = 0
Do Until EOF(1)
Line Input #1, bufRec
i = i + 1
bufSplit = Split(bufRec, ",")
For j = 0 To UBound(bufSplit)
Cells(i, j + 1) = bufSplit(j)
Next
Loop
Close #1
End Sub
Open~For InputでCSVを読み込み、1行ずつ読み込みつつ、カンマ区切りの文字列を配列に変えてセルに書き出すというやり方です。
このとき、「Cells(i, j + 1) = bufSplit(j)」の前に、「Cells(i, j + 1).NumberFormatLocal = “@”」と入れることで、すべて文字列として処理することが可能となります。
ただ、このパターンでも、データの中に「,」が入っているような場合には、うまく読み込みができません。
例えば、「”test Co., Ltd”, “aaa”, “3-2″」のようなデータをこれで読み込むと、「Co,」の「,」も区切り位置と判定されるため、本来は3つしかデータがないはずなのに、4つと判定されてしまいます。
対処法は?
そこで、対処法としては、頭から一つ一つ内容を見ていき、データとしての「,」と区切り文字としての「,」を見分けてあげるという作業をすることになります。
CSVはかなり汎用性が高いデータで、逆にそれ故にデータの入力方法が様々です。
様々なCSVに対処するためにはこの方法をとるしかありません。
具体的なコードについては次回解説していきます!
コメント