- ベストアンサー
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 自分なりに考えてみましたが、ぜんぜん動きません。 どなたかご教授をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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列をコピーして,その場で型式を選んで値のみ貼り付ける
その他の回答 (1)
- nattocurry
- ベストアンサー率31% (587/1853)
VBEで[F8]キーを押すと、ステップ実行が出来ます。 ステップ実行で、どの行で、思惑通りの動作をしていないのかを突き止めましょう。
お礼
回答ありがとうございます。 F8キーやってみました。 Do While Worksheets("sheet1").Cells(r, 1) <> "" この行でもう一度F8を押すと End Sub まで飛んでいきました。 この間のコードがおかしいということでしょうか?
お礼
回答ありがとうございます。 教えていただいたコードを早速実行してみましたが、 B~E列に =R[-1]C が連続して表示されました。 range("B2:E" & r).specialcells(xlcelltypeblanks).formular1c1 = "=R[-1]C" たぶんこの部分を直せばいいのかと思ったのですが、どしたらいいのか 分かりません。
補足
たびたびすみません。 セルの書式が文字列になっていたために上手くいかなかったようです。 希望した通りにできました。 すごくシンプルなコードに感動しました。 ありがとうございました。