質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

974閲覧

VBAでカンマ区切りの文字列を分割したい

kh101

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/08 01:59

以下のような文字列があります。

Dim str As String: str = "(1,2,3,4,5,6,…,55)"

これを以下のように要素数が10個ずつの文字列になるようにしたいですが方法が思いつきません。
なにかよい方法はないでしょうか?
よろしくお願いいたします。

Dim str1 As String: str1 = "(1,2,3,…10)" Dim str2 As String: str2 = "(11,12,13,…20)" … Dim str5 As String: str5 = "(41,42,43,…50)" Dim str6 As String: str6 = "(51,52,53,54,55)"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/02/08 02:01

格納先は配列にしないのでしょうか?str1,str2ではなく、str(1),str(2)のように。
kh101

2019/02/08 02:15

最終的に文字列として取得したいです。
ttyp03

2019/02/08 02:18

いや、それはわかるのですが、 Dim str1 As String Dim str2 As Striing ~ Dim str6 As Striing と変数を分けないといけないのか、 Dim str2(5) As String と配列にしてもよいのか、ということです。
guest

回答3

0

ベストアンサー

回答待ってる間に両パターンかけてしまったので貼っておきます。

格納先変数をそれぞれ分ける場合。

VBA

1Sub test() 2 Dim str As String: str = "(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55)" 3 Dim str1 As String 4 Dim str2 As String 5 Dim str3 As String 6 Dim str4 As String 7 Dim str5 As String 8 Dim str6 As String 9 Dim cols As Variant 10 Dim temp() As Variant 11 ReDim Preserve temp(9) 12 13 cols = Split(Mid(str, 2, Len(str) - 2), ",") 14 15 For i = 0 To UBound(cols) 16 temp(i Mod 10) = cols(i) 17 If i Mod 10 = 9 Or i = UBound(cols) Then 18 ReDim Preserve temp(i Mod 10) 19 Select Case Application.WorksheetFunction.RoundDown(i / 10, 0) 20 Case 0: str1 = "(" & Join(temp, ",") & ")" 21 Case 1: str2 = "(" & Join(temp, ",") & ")" 22 Case 2: str3 = "(" & Join(temp, ",") & ")" 23 Case 3: str4 = "(" & Join(temp, ",") & ")" 24 Case 4: str5 = "(" & Join(temp, ",") & ")" 25 Case 5: str6 = "(" & Join(temp, ",") & ")" 26 End Select 27 ReDim temp(9) 28 End If 29 Next 30End Sub

格納先を配列にする場合。

VBA

1Sub test2() 2 Dim str As String: str = "(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55)" 3 Dim str2(5) As String 4 Dim cols As Variant 5 Dim temp() As Variant 6 ReDim Preserve temp(9) 7 8 cols = Split(Mid(str, 2, Len(str) - 2), ",") 9 10 For i = 0 To UBound(cols) 11 temp(i Mod 10) = cols(i) 12 If i Mod 10 = 9 Or i = UBound(cols) Then 13 ReDim Preserve temp(i Mod 10) 14 str2(Application.WorksheetFunction.RoundDown(i / 10, 0)) = "(" & Join(temp, ",") & ")" 15 ReDim temp(9) 16 End If 17 Next 18End Sub

投稿2019/02/08 02:22

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

()が邪魔ですが、splitで一度区切ってから、10個づつ整形し直すのが良いと思います。

ttyp03さんの仰る通り、ReDim Preserveを使いば配列の要素数を増やすことが可能な為、
配列で行うのがベストだと思います。

投稿2019/02/08 02:19

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なにかよい方法

ステップで書くと

  1. 対象文字列から()を取る
  2. ↑で得た文字列をSplitでわける
  3. ↑で得た配列の個数を得る
  4. ↑を10で割り、最終的に得る文字列群の個数を得る。その個数の文字列配列を宣言
  5. 文字列群の個数のForをする
  6. 10回のForにする
  7. 外側forのindexから判明する最終文字列群の1つの要素に対して、外側forと内側forから2.で得た配列の番地を計算し、文字列連結する

投稿2019/02/08 02:21

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問