<目次>
(1) VBAでcsvを読み込み区切り文字で区切る方法
(1-1) 構文
(1-2) サンプルプログラム
(1-3) サンプルプログラムの実行結果
(1) VBAでcsvを読み込み区切り文字で区切る方法
(1-1) 構文
指定した区切り文字で区切るためには「Split」ファンクションを使用します。構文は次のようになっており、区切った結果を1次元の配列として、戻り値で返却します。
(構文)
Split([分割対象の文字列], "[区切り文字(任意)]",[配列要素数])
(構文説明)
[分割対象の文字列] | 【必須】 String型を与えます。もし長さ0の文字列を与えた場合は空の1次元配列を返却します。 |
[区切り文字] | 【任意】 任意の区切り文字を与えます。もし省略した場合はデフォルトで「” “」で区切ります。 (例) |
[配列要素数] | 【任意】 返却される配列の要素数をIntegerで指定できます。例えば「2」と指定した場合は2要素なので、区切りは1回のみしか行われません(-1で全返却) |
(例)
'# 分割結果の格納用 Dim Result() As String Result() = Split(tmpBook.ActiveSheet.Cells(i1, 1).Value, ";")
(1-2) サンプルプログラム
(サンプル)
Public Sub SepCsv() Dim i1 As Integer '# 分割結果の格納用 Dim Result() As String '# 分割対象のcsvを開く Dim tmpBook As Workbook: Set tmpBook = Workbooks.Open("C:\Temp\SepCsv\SampleData.csv") Debug.Print "#### : " & tmpBook.Name '# 開いたcsvの各行をループする For i1 = 1 To 1000 '# 各行のA列の情報をSplitにより、指定したセパレータ(例「;」)で分割 Result() = Split(tmpBook.ActiveSheet.Cells(i1, 1).Value, ";") '# 分割した単語の個数が0以上の場合(行に何か情報があった場合) If UBound(Result) > 0 Then '# 分割した単語数だけ列ループする For j1 = 0 To UBound(Result) '# 分割した各単語を、同じ行の「j1」列目にコピー '#(=セパレータで行を分割したのと同等の結果になる) tmpBook.ActiveSheet.Cells(i1, j1 + 1).Value = Result(j1) Next End If Next tmpBook.Save tmpBook.Close End Sub
(図121)
(1-3) サンプルプログラムの実行結果
・Before