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
'----------------------------------------------------------------------------------------------------------------------
|