「これはヤバかったな」という遅刻エピソード

計算式が入力されており、合計が0(A,B列に数値が入力
されていない)の行を削除するVBAを教えてください。

  A  B  C   
1  10  5 15
2       0
3  20  6 26

C列に計算式が入力されています。
50行目まで入力されています。
オートフィルタを使用し、抽出された行を削除する方法が
あると思いますが、VBAで作成する方法を探しています。

よろしくお願いします。

A 回答 (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) でも可。
行削除の場合、下から上に上っていくのがポイントです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/18 23:13

こんにちは。


>合計が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 の方が誤作動を防止できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/18 23:14

こんな方法もあるという感じで・・・



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
    • good
    • 1
この回答へのお礼

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

お礼日時:2010/01/18 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報