LoginSignup
0
1

More than 5 years have passed since last update.

OFFICE VBA Splitで長すぎる配列のデータをどうやって改行して代入するか

Posted at

できない例

Sub test_failed()
Dim ar
Dim i
ar = Split(" _
"A," _
"B", _
"C", _
, ",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub

たとえばこのデータ(改行 vbCrlf含む)を配列に入れるのはどうすればいいでしょうか?
VBEditorには1行の字数制限があります。したがって配列変数を代入するとき長すぎると改行する必要があります。しかし上の例はうまくいきません。
しかもこれはどこに書いてあるのかよくわからないので一応成功したのでメモします。

&の使用

Sub test()
Dim ar
Dim i
ar = _
Split( _
"AbC" & _
"DEF," & _
"GH," & _
"II," & vbCrLf & _
"JJ," & _
"シャア専用," & _
"KK," & _
"LL," & _
"オールリセット," & _
"集計 ", ", ")

For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub

AbCDEF,GH,II,
JJ,シャア専用,KK,LL,オールリセット,集計 41
これでなんとたった一つの配列の要素になっています。
ポイントは
"集計 ", ", ")
区切り文字の部分です。
通常区切り文字の指定にスペースを入れないのですが、半角の空白を入力します。
これでひとつながりになります。
しかし区切り文字のスペースを削除するとバラバラになります。
空白のあるなしで随分違います。もっと明確にコントロールできるか。次のようになっていきます。

改行しながら複数の要素を入れる実験

Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B" & _
",", "," _
)
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i)
Next
End Sub

これを出力すると
: ar(0) : "A" : String
: ar(1) : "B" : String
: ar(2) : "" : String
となります。ということは
",", "," _
は "コンマ空の要素",区切り文字空白アンダーバー
となっているようです

多数の要素を入れる完成形

Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B," & _
"C", _
",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub

出力
A 1
B 1
C 1

Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B" & _
"C", _
",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub

出力
A 1
BC 2
Bの後ろにコンマがないので切れないでCにつながりました。
もしエラーになる場合には最後の要素(上記はC)で無理に折れずに
ar = _
Split( _
"A," & _
"B" & _
"C",",")
としてください。この方が安定します。
このように多数の要素で、しかも途中で中折れしても、このように代入ができます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1