• ベストアンサー

合計が0の行を削除

計算式が入力されており、合計が0(A,B列に数値が入力 されていない)の行を削除するVBAを教えてください。   A  B  C    1  10  5 15 2       0 3  20  6 26 C列に計算式が入力されています。 50行目まで入力されています。 オートフィルタを使用し、抽出された行を削除する方法が あると思いますが、VBAで作成する方法を探しています。 よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

一例です。 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) でも可。 行削除の場合、下から上に上っていくのがポイントです。

cuxxx
質問者

お礼

ご回答ありがとうございます。 希望通りの動作することが出来ました。 ありがとうございました。

その他の回答 (2)

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.3

こんにちは。 >合計が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 の方が誤作動を防止できます。

cuxxx
質問者

お礼

ご回答ありがとうございます。 色々な方法があることがわかり、勉強に なりました。 ありがとうございました。

  • hahuuno
  • ベストアンサー率27% (3/11)
回答No.1

こんな方法もあるという感じで・・・ 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

cuxxx
質問者

お礼

ご回答ありがとうございます。 動作することが出来ました。 ありがとうございました!

関連するQ&A