- ベストアンサー
エクセル:VBA 特定の行以外のデータを消したい。
VBA初心者です。よろしくお願いします。 生まれて初めて、自分でコード下記のように書いてみました。 エクセルで、G2:EU30000の間で (5行目+加算値4)という特定行のデータを消去するときは、 Sub 特定行のデータ消去() '5行目以降、加算値4の行でデータ消去(9行,13行,17行,21行・・・) Dim 行番号 As Integer For 行番号 = 5 To 30000 Step 4 Range(Cells(行番号, 7), Cells(行番号, 151)).Clear Next 行番号 End Sub で、おそらく間違いではないと思うのですが、苦労して書いてあとに気がつきました。その逆(つまり★印以下の内容)のことをしたいのでした。どうか、ご指導ください。 ★特定の行だけ(5行名以降、加算値4の行)のデータ(計算式)を残して、その他のすべての行のデータを消すVBA
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Resizeメソッドがお洒落ですがぱっと見ではちょっと分かり難いのであっさりと。 ------------------------------------ Sub 特定行のデータ消去() Dim 行番号 As Long For 行番号 = 5 To 32762 Step 4 Range(Cells(行番号 + 1, "G"), Cells(行番号 + 3, "EU")).ClearContents Next 行番号 End Sub ------------------------------------- 行番号+1,+3で6-8,10-12,14-16・・・の3行をとる それから、 ●行番号は、Integerではなくて、Longにしておく ●データのみ消す場合は、Clearではなくて、ClearContentsにする ●Cellsの列番号は、数値ではなく、G,EUとかの文字番号を使うほうが分かりやすい 以上。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
こういうときは 消す と考えないで 残す行を、別シート(または同一シートの別行範囲)に移す というほうが、やりやすいですよ。 VBAで行削除をするのは、下行から上へ処理(削除)というような工夫をしないと危険です(ロジックが破綻する場合があります)。 上からですと、ForNextのiで行を捉えると、行数が削除によって繰り上がるので、失敗した経験があります。 ーー 初心者はコードのことを注目して、質問するが、本当は、プログラムを組むのに大切なのは、ロジック(処理の筋道、流れ、フローチャート)だと思います。 それだけに色々な達成のやり方がありえて、誤りがおきやすかったり、があります。経験を積むとは、プロパティやメソッドを覚えて増やすほかに、ロジックの経験を増やすことです。言語に、ほとんど依存しないところなので、プログラム経験があると、他言語でのプログラム習得が早いように思います。
お礼
ご指導ありがとうございます。 「ロジックの経験」とご指導いただいたあたりは、 やはりいろいろな問題にぶつかったときに自分で考えることから 逃げてはいけないと思いました。 心より感謝いたします。
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 そういう時は、 OffsetとResizeを使うと簡単ですね。 Sub 特定行のデータ消去2() '5行目以降、加算値4の行でデータ消去(9行,13行,17行,21行・・・) Dim 行番号 As Integer For 行番号 = 5 To 30000 Step 4 Range(Cells(行番号, 7), Cells(行番号, 151)).Offset(1).Resize(3).Clear Next 行番号 End Sub
お礼
お礼が遅くなりました。できました! ありがとうございました。 OffsetとResizeについても勉強してみます。^^ 心より感謝いたします。
お礼
とてもわかりやすい考え方、コードをありがとうございました。 論理をシンプルにしてくださって感謝いたします。 初心者の私でも内容まで理解できました。 本当にありがとうございました。