改行を含まないが、カンマを含む可能性があるCSVは
ダブルクオートで囲んでカンマ区切りにする。
例.
"foo","bar","baz"
"hoge","fuga","piyo"
上のような形式のCSVファイルをパースする手順
(1)一行で読み込み、先頭と終端の"を除去する
(2)","でSplitして配列にする
Function LoadCSV()
Dim FileType, Prompt As String
Dim FileNamePath As Variant
Dim textline, CsvArray() As String
Dim RowCnt As Long
Dim ch1 As Long
FileType = "CSV ファイル (*.csv),*.csv"
Prompt = "CSV File を選択してください"
FileNamePath = Application.GetOpenFilename(FileType, , Prompt)
'キャンセルされた
If FileNamePath = False Then End Funciton
'空いているファイル番号の取得
ch1 = FreeFile
'FileNamePath のファイルをオープンします
Open FileNamePath For Input As #ch1
'エラーが発生したらファイルを閉じます
On Error GoTo CloseFile
'表の行番号の初期化
RowCnt = 1
'ファイルの終端まで
Do Until EOF(ch1)
'1行読み込む
Line Input #ch1, textline
'CSVをパース
textline = Mid(textline, 2, Len(textline) - 2)
CsvArray = Split(textline, """,""")
'配列渡しでセルに代入
Range(Cells(RowCnt, 1), Cells(RowCnt, UBound(CsvArray()) + 1)) = CsvArray()
RowCnt = RowCnt + 1
Loop
CloseFile:
Close #ch1 'ファイルのクローズ
End FunctionCSVファイルフォーマットの解説:CodeZine
改行のある場合は1行ずつ読み込む方法じゃ無理だからもっと面倒。
値の中にダブルクオーテーションがある場合のエスケープなんかも考慮してない。
ある程度自由にCSV側の出力をいじれるならパースする方も楽。
