• ベストアンサー

Excel マクロ VBA セル内で改行された文字列の分割

はじめまして。 ExcelのVBA初心者で、ちょっと困っています。 (例) (1) セルA1に以下のような改行された文字列が入力されています。 【セルA1】 a aa aaa b bb bbb (2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。 【セルA2】 a aa aaa 【セルA3】 b bb bbb ※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。 そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。 Sub 分割() Dim A, B, C A = Split(Range("A1"), Chr(10)) B = 0 For Each C In A B = B + 1 Range("A2").Offset(B - 1, 0).Value = C Next End Sub ご教授いただけると助かります。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

Sub 分割() Dim A, B, C, E A = Split(Range("A1"), Chr(10)) B = 1 E = 1 For Each C In A If E = 1 Then Range("A2").Offset(B - 1, 0).Value = C Else Range("A2").Offset(B - 1, 0).Value = _ Range("A2").Offset(B - 1, 0).Value & Chr(10) & C End If If E = 3 Then B = B + 1 E = 0 End If E = E + 1 Next End Sub でどうでしょう。

devilken53
質問者

お礼

はじめまして。 希望していた通りの結果が得られました。 大変勉強になりました。ありがとうございました。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。ごめんなさい、この方が、良いかも。 Sub divide() Dim A, B, C, D A = Split(Range("A1"), Chr(10)) B = -1 For Each C In A B = B + 1 Set D = Cells(1, Int(B / 3) + 2) If ((B Mod 3) = 0) Then D.Value = "" D.Value = D.Value & Chr(10) & C Next End Sub

devilken53
質問者

お礼

はじめまして。 得られる結果は同じでも、色々な書き方があるのだと改めて感じました。 大変勉強になりました。ありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

同じですが・・・ Sub divide() Dim A, B, C A = Split(Range("A1"), Chr(10)) B = -1 For Each C In A B = B + 1 If ((B Mod 3) = 0) Then Cells(1, Int(B / 3) + 2).Value = "" Cells(1, Int(B / 3) + 2).Value = Cells(1, Int(B / 3) + 2).Value & Chr(10) & C Next End Sub

関連するQ&A