• ベストアンサー

VBAで特定の値がある行を連続コピーしたい

Excel 2003 OS XP Professional SP3 VBAは自分でコードは組むことはできませんので見よう見まねでやっているレベルです。 A B C D E の列があり、行の1行目はタイトル行になっています。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111 222 333 '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444 555 '   MMM  NNN  OOO  PPP A列にカンマがある行にはB~E列に値が入力されていて、A列にカンマ以外の値が入力されている 場合にはB~Eには何も入力されていません。 A列にカンマ以外の値の時、カンマのある行のデータを次のカンマのある行までフィルハンドルをドラッグしてコピーするよう にしたいです。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111  AAA  BBB  CCC  DDD 222  AAA  BBB  CCC  DDD 333  AAA  BBB  CCC  DDD '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444  III  JJJ  KKK  LLL 555  III  JJJ  KKK  LLL '   MMM  NNN  OOO  PPP   sub 連続コピー() Dim r As Long Dim n As Long r = 2 n = r + 1 Do While Worksheets("sheet1").Cells(r, 1) <> "" If Worksheets("sheet1").Cells(r, 1).Value = Worksheets("sheet1").Cells(n, 1).Value Then r = n n = n + 1 Else Range(Cells(r, 2), Cells(r, 5)).Copy Range(Cells(n, 2), Cells(n, 5)) n = n + 1 End If Loop End Sub 自分なりに考えてみましたが、ぜんぜん動きません。 どなたかご教授をお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

sub macro1()  dim r as long  r = range("A65536").end(xlup).row  range("B2:E" & r).specialcells(xlcelltypeblanks).formular1c1 = "=R[-1]C"  range("B2:E" & r).value = range("B2:E" & r).value end sub #マクロではなく手でエクセルを操ると B:E列を列選択, Ctrl+G→セル選択→空白セルにマークしてOK, B2セルがアクティブセルになっている状態で =B1 と打ち込んでCtrlキーを押しながらEnterする 更にB:E列をコピーして,その場で型式を選んで値のみ貼り付ける

chibi126
質問者

お礼

回答ありがとうございます。 教えていただいたコードを早速実行してみましたが、 B~E列に =R[-1]C が連続して表示されました。  range("B2:E" & r).specialcells(xlcelltypeblanks).formular1c1 = "=R[-1]C" たぶんこの部分を直せばいいのかと思ったのですが、どしたらいいのか 分かりません。

chibi126
質問者

補足

たびたびすみません。 セルの書式が文字列になっていたために上手くいかなかったようです。 希望した通りにできました。 すごくシンプルなコードに感動しました。 ありがとうございました。

その他の回答 (1)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

VBEで[F8]キーを押すと、ステップ実行が出来ます。 ステップ実行で、どの行で、思惑通りの動作をしていないのかを突き止めましょう。

chibi126
質問者

お礼

回答ありがとうございます。 F8キーやってみました。 Do While Worksheets("sheet1").Cells(r, 1) <> "" この行でもう一度F8を押すと End Sub まで飛んでいきました。 この間のコードがおかしいということでしょうか?