改行を含まないが、カンマを含む可能性がある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 Function
CSVファイルフォーマットの解説:CodeZine
改行のある場合は1行ずつ読み込む方法じゃ無理だからもっと面倒。
値の中にダブルクオーテーションがある場合のエスケープなんかも考慮してない。
ある程度自由にCSV側の出力をいじれるならパースする方も楽。