- ベストアンサー
合計が0の行を削除
計算式が入力されており、合計が0(A,B列に数値が入力 されていない)の行を削除するVBAを教えてください。 A B C 1 10 5 15 2 0 3 20 6 26 C列に計算式が入力されています。 50行目まで入力されています。 オートフィルタを使用し、抽出された行を削除する方法が あると思いますが、VBAで作成する方法を探しています。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一例です。 Sub test01() Dim i As Long For i = Cells(Rows.Count, "C").End(xlUp).Row To 1 Step (-1) 'C列入力最下行から1行目まで If Cells(i, "C").HasFormula Then 'もし数式であれば If Cells(i, "C").Value = 0 Then 'もし計算結果が0であれば Cells(i, "C").EntireRow.Delete 'その行を削除 End If End If Next '繰り返す End Sub 50行目であろうが100行であろうが自動的に判断します。 判断不要でかならず50行なら For i = 50 To 1 Step (-1) でも可。 行削除の場合、下から上に上っていくのがポイントです。
その他の回答 (2)
- avanzato
- ベストアンサー率54% (52/95)
こんにちは。 >合計が0(A,B列に数値が入力されていない)の行を削除する という意味がA=10 B=-10の行は削除しないと言うことであればC列で判断をすると結果が異なります。 方法はいくつもあるかと思いますが私の場合は以下のようなコードにします。 Sub Sample() Dim I As Integer I = 1 Do While Range("C" & I).Value <> "" If Len(Range("A" & I).Value & Range("A" & I).Value) = 0 Then Range(I & ":" & I).Delete Shift:=xlUp Else I = I + 1 End If Loop End Sub ループ1つにしても方法が色々あるかと思いますがオートフィルタを使用している環境の場合はDo While の方が誤作動を防止できます。
お礼
ご回答ありがとうございます。 色々な方法があることがわかり、勉強に なりました。 ありがとうございました。
- hahuuno
- ベストアンサー率27% (3/11)
こんな方法もあるという感じで・・・ Sub test() Dim r As Range, rr As Range Set rr = Nothing For Each r In Range("c1:c50") If r.Value = 0 Then If rr Is Nothing Then Set rr = r Else Set rr = Union(rr, r) End If End If Next r rr.EntireRow.Delete End Sub
お礼
ご回答ありがとうございます。 動作することが出来ました。 ありがとうございました!
お礼
ご回答ありがとうございます。 希望通りの動作することが出来ました。 ありがとうございました。