• 締切済み

Excel 複雑なセル埋めのVBA

エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。

みんなの回答

noname#31387
noname#31387
回答No.3

すいません >これを以下のようにB列を埋めたいと考えています。 >A列を埋めるVBAは当方で分かります。 とあったのでA列は入力済として作成しています。 A列を入力後試してください。

0615yas
質問者

お礼

済みません、ご指摘の通りA列埋めずに動作確認してました。これで問題は解決しました、本当に有り難うございました。

noname#31387
noname#31387
回答No.2

もっとよい方法があると思うのですが・・・ シート名は変更して下さい。一応D列に書き出しています。 勘違いなら御免なさい。 Sub SP_1() Dim Lrow As Long, myB As Long, myC As Long Dim f As Long, ff As Long, fff As Long Dim c As Long, buf() As Variant c = 0 With Worksheets("Sheet1")  Lrow = .Range("A" & CStr(Rows.Count)).End(xlUp).Row   For f = 1 To Lrow    If .Range("B" & CStr(f)).Value <> "" Then     myB = .Range("B" & CStr(f)).Value     myC = .Range("C" & CStr(f)).Value     For ff = 1 To myC      For fff = 1 To myB       c = c + 1       ReDim Preserve buf(1 To 1, 1 To c)       buf(1, c) = fff      Next     Next    End If   Next  .Range("D1").Resize(Lrow, 1).Value = _      WorksheetFunction.Transpose(buf) End With

0615yas
質問者

お礼

御回答有り難うございました、ほぼ希望通りなのですがこのマクロを動かすと最後の9行目で止まってしまい14行目まで行きません。もしお心当たりがありましたらご教授いただけると幸いです。 同じ目的でも色々方法があるのが勉強になります。先にご回答頂いたマクロとの違いも自分なりにひもといてみようと思います。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マクロは、以下の通り I = 1 Do While I < 100 If Cells(I, 2) <> "" Then B = Cells(I, 2) C = Cells(I, 3) For J = 1 To C For K = 1 To B Cells(I + K - 1, 2) = K Next I = I + B Next End If Loop

0615yas
質問者

お礼

有り難うございました、確認した所希望通りの動作です。ただ、自分の環境だけかもしれませんがマクロが終わった後にポインタが砂時計になり帰ってきません。これについては他のPCで調べるなどして何とか自分で解決を目指したいと思います。 このたびは大変助かりました、自分も頑張って回答者に回れるように精進したいと思います。

関連するQ&A