Excel VBA 「CSV展開関数」・CSV形式のデータをExcelのセルに展開する関数です。 ・おそらく効率の良いアルゴリズムではありません。 しかし、ダブルクォーテーションやカンマが含まれる形式に対応する方法が 見つからなかったので、自分でつくりました。 ・仕様,使い方 ファイル規則: 1.値はカンマで区切られていること。 2.ダブルクォーテーション、カンマ、改行が値に含まれる場合は、 値がダブルクォーテーションで囲まれていること。 3.ダブルクォーテーションが値に含まれる場合は、「"」を「""」として保存されていること。 4.列数が全ての行で同じであること。 読み込み規則: 1.レコードの境目はカンマにして読み込んでください expandCSV(CSVデータ,データ出力開始行,データ開始出力列,列数) 例)expandCSV("太郎,20才,東京都在住" & "," & "次郎,16才,大阪府在住",1,2,3) ※上の例だと、B1のセルから出力が開始されます '---------------------------------------------------------------------------------------------------------------------- Sub expandCSV(ByVal FILE_DATA As String, ByVal START_ROW As String, ByVal START_COLUMN, ByVal COLUMN_COUNT As Integer) Application.ScreenUpdating = False csv = Split(FILE_DATA, ",") j = 0 curRow = START_ROW For i = 0 To UBound(csv) buf = csv(i) Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "^""" escStart = .test(csv(i)) End With If escStart Then buf = Mid(buf, 2, Len(buf)) qcnt = UBound(Split(buf, """")) If qcnt <= 0 Or qcnt Mod 2 = 0 Then i = i + 1 While (qcnt <= 0 Or qcnt Mod 2 = 0) And i < UBound(csv) buf = buf & "," & csv(i) qcnt = UBound(Split(buf, """")) i = i + 1 Wend i = i - 1 End If buf = Left(buf, Len(buf) - 1) buf = Replace(buf, """""", """") End If Cells(curRow, START_COLUMN + j).Value = buf buf = "" j = j + 1 If COLUMN_COUNT <= j Then curRow = curRow + 1 j = 0 End If Next i Application.ScreenUpdating = True End Sub '---------------------------------------------------------------------------------------------------------------------- |
Copyright © 2008-2024 Nekorald All rights reserved.