【めざせExcelマスターへの道】CSVを開く方法について①

Excel
  • VBAを使っていると何かと扱うことの多いCSV
  • CSVの開き方についてまとめていきます
スポンサーリンク

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に対処するためにはこの方法をとるしかありません。

具体的なコードについては次回解説していきます!

コメント

タイトルとURLをコピーしました