- ベストアンサー
エクセル
前回質問させていただきました件の続になります。 大まかにうまく行きそうですが、一部 ¥0の部分が入っている行を削除したいのですが、うまくいきません。 データはA~Eに入力されていて、B列に数字が入っています。 B列が 0の場合その行を削除します。 If Worksheets("Sheet2").Cells(F, 2) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Fは行数をカウントするものです。 お手数ですが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
行の削除には、コツ(定石)があって、下の行からやって見てはどうでしょう。(Step -1) Sub test02() Dim sh1 As Object Set sh1 = Worksheets("Sheet3") d = sh1.Range("B65536").End(xlUp).Row For i = d To 1 Step -1 If sh1.Cells(i, "B") = 0 Then sh1.Rows(i).EntireRow.Delete End If Next i End Sub 多分#1でご指摘のような件が避けられます。
その他の回答 (2)
- na_kirajp
- ベストアンサー率43% (33/76)
#1です。 0で削除した場合に、削除行からしたの行数はー1されます。ただ、Fは次の値で処理をする為、削除行の直下の1行は判定されず0であっても削除されなくなっていると思います。 もっとスマートなやり方もあるかもしれませんが、 例えばこの形とか (iは単に何回処理を行うかだけの変数です) f = 1 For i = 1 To 処理する行数 If Worksheets("Sheet1").Cells(f, 2) = 0 Then '0の場合は行を削除する Cells(f, 1).EntireRow.Delete Else f = f + 1 End If Next i End Sub
- na_kirajp
- ベストアンサー率43% (33/76)
>Fは行数をカウントするものです。 0の行を削除したら、削除行以降は-1行されて上がってきますがFはその点考慮していますか?
補足
下記のようになって降ります。 Sub BBBB() ' 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Range("A65536").End(xlUp).Row For F = 1 To E If Worksheets("Sheet2").Cells(F, 2) = 0 Then '0の場合は行を削除する Cells(F, 2).EntireRow.Delete End If Next End Sub
お礼
具体的に書いていただきありがとうございます。 できました。