エクセルのVBAでの汎用的なCSVを読み込む関数を作ってみました。
readCSVwithDoubleQuatation関数は、”で囲まれていて、カンマで区切られているCSV用の関数です。
readCSVwithSingleQuatation関数は、’で囲まれていて、カンマで区切られているCSV用の関数です。
readCSVwithNoQuatation関数は、カンマで区切られているだけのCSV用の関数です。
analyseCSV関数はCSVファイルを読み込むためのメインの処理の関数です。
CSVファイルをただ読み込むならエクセルで開くのが簡単ですが、ただ読み込むだけではなく、読み込んだ時に何かしらの処理をしたい場合にひな形になるVBAです。
analyseCSV関数の中の「'do something」の所で処理したい内容を書き込む
とよいと思います。
なお、読み込んだデータは表示されているシートに読み込まれます。
Option Explicit 'カンマで区切られて、各データが"(ダブルクォーテーション)で囲まれているファイル用 Public Sub readCSVwithDoubleQuatation() Dim FD As FileDialog, f As Variant Set FD = Application.FileDialog(msoFileDialogOpen) With FD With .Filters .Clear .Add "テキストファイル", "*.csv;*.txt", 1 End With If .Show = True Then Debug.Print .SelectedItems(1) Call analyseCSV(.SelectedItems(1), """") End If End With End Sub 'カンマで区切られて、各データが'(シングルクォーテーション)で囲まれているファイル用 Public Sub readCSVwithSingleQuatation() Dim FD As FileDialog, f As Variant Set FD = Application.FileDialog(msoFileDialogOpen) With FD With .Filters .Clear .Add "テキストファイル", "*.csv;*.txt", 1 End With If .Show = True Then Debug.Print .SelectedItems(1) Call analyseCSV(.SelectedItems(1), "'") End If End With End Sub 'カンマで区切られて、各データがクォーテーションで囲まれていないファイル用 Public Sub readCSVwithNoQuatation() Dim FD As FileDialog, f As Variant Set FD = Application.FileDialog(msoFileDialogOpen) With FD With .Filters .Clear .Add "テキストファイル", "*.csv;*.txt", 1 End With If .Show = True Then Debug.Print .SelectedItems(1) Call analyseCSV(.SelectedItems(1), "") End If End With End Sub 'メインの処理用関数 Private Sub analyseCSV(ByVal fileName As String, ByVal quote As String) Dim fileNum As Integer Dim buf As String 'カンマでスプリットした後の配列 Dim arrLineData() As String Dim strSplit As String 'ワークシートの行番号 Dim row As Integer Dim i As Integer 'くぉーとの長さ Dim length As Integer If fileName = "" Then Exit Sub End If 'クォーテーションの長さを取得しておく(汎用のため) length = Len(quote) strSplit = quote & "," & quote 'ワークシートの行の番号 row = 1 '空いているファイル番号を取得 fileNum = FreeFile Open fileName For Input As #fileNum Do Until EOF(fileNum) Line Input #fileNum, buf '行の最初と最後の囲み文字を削除する処理 buf = Left(buf, Len(buf) - length) buf = Right(buf, Len(buf) - length) '1行のデータを各項目に分解する処理 arrLineData = Split(buf, strSplit) '何かの処理をしたい場合はここで処理を書き込む 'do something 'ワークシートのセルに書き込む For i = 0 To UBound(arrLineData) If quote = """" Then arrLineData(i) = Replace(arrLineData(i), """""", """") End If Cells(row, i + 1) = arrLineData(i) Next i 'ワークシートの行番号をカウントアップする row = row + 1 Loop Close #fileNum End Sub