入金済みデータを抽出してその行を削除したいが?

Question 42.2 Excel VBA Borad (掲示板)より Previous Next
自分でもいろいろ試しているのですが、どうしても分からないことがあるので、どなたか教えていただけませんか?
未収処理をしたいのですが、何件もあるデータの中で入金をしたデータだけを抽出して、行ごと削除という流れを作りたいと思っています。
抽出する方法は、あるセルに入金額が入力されているもの(なおかつそれが未収金と一致)を検索するという形を取りたいのですが、どう記述すればいいのかが分からず、悩んでいます。
未収一覧 ご指導、お願いできますでしょうか?

ワークシートは右図のとおりです。

おおよその流れは次のとおりです。

1. もとデータには未収金が入っている
2. あとから入金額を入力する
3. その未収金額と入金額が一致するかどうかを調べる
4. 2つのデータが合っているものをまとめて削除する
Answer   2001.5.22 ムラジロ~
ただ、探して削除しちゃえばよろしいのでしょうか?
G列の値が 0の行を削除すればよいなら、次のような感じのマクロになります。
Dim myRow As Long

    Application.ScreenUpdating = False
    Worksheets("未収処理").Select
    Range("A1").Select
    For myRow = Cells(Rows.Count, 7).End(xlUp).Row To 3 Step -1
        With Cells(myRow, 7)
            If .Value = 0 Then .EntireRow.Delete
        End With
    Next
    Application.ScreenUpdating = True
なるほど~ 2001.5.22 質問者より
やっぱりすごいですね。
ムラジロ~さんのマクロで、やりたいことがすんなりできました。
G列が 0のものを削除するだけでよかったんですよ。 ただ、それのやり方が分からなかったので・・・。
どういう処理になっているのかをひとつひとつ解説していただけると、今後の参考になりますので教えていただけませんか?
Answer   2001.5.23 ムラジロ~
削除の方法は、下からループさせるという基本的な構造です。
もちろん他にも方法はあるのですが、基本を押さえることは重要ですので、今回はその方法をご提示させていただきました。以下が解説です。
Dim myRow As Long 変数myRowを長整数型で宣言します。
変数の宣言はきちんとする習慣をつけましょう。また、適切なデータ型を指定することも、パフォーマンスの向上に有効です。
Application.ScreenUpdating = False
画面の動きを止めて、パフォーマンスを向上させます。
Worksheets("未収処理").Select
シート「未収処理」を選択します。
Range("A1").Select セルA1を選択します。
For myRow = Cells(Rows.Count, 7).End(xlUp).Row To 3 Step -1
上述の通りStepキーワードを指定することで、下からループさせます。
Cells(Rows.Count, 7).End(xlUp) … G列の最下行からCtrl+↑で選択されるRangeオブジェクト、つまりデータの入っている最終行を返します。
もしも最下行にデータがある場合があるのでしたら、このままでは正常に動作しませんので、
If Len(Cells(Rows.Count, 7).Value) Then
Application.ScreenUpdating = True
Exit Sub
End If
といった処理をこの前に加えて、G列の最下行の値が文字列長を持っている場合、つまり何かが入力されている場合には、処理をしないようにします。
With Cells(myRow, 7) Withステートメントを使用して、オブジェクトの記述を省略します。
If .Value = 0 Then .EntireRow.Delete
G列のmyRow行の値が0ならば、その行を削除します。この際に上からループさせていると、行が上に詰まってしまうために不具合が生じるので、下からループさせているのです。
End With
Next
Application.ScreenUpdating = True
画面の動きを止めていたのを元に戻します。通常コードの実行の終了とともに自動でリセットされますが、たまに戻らないバグがありますので、きちんと戻すコードを付与する習慣をつけましょう。
こんな説明でよろしいでしょうか?
ありがとうございました 2001.5.23 質問者より
ひとつひとつ解説を見ていくと、やっていることがちゃんと理解できました。
今後もいろいろマクロを使う機会が増えそうなので、これを機にきちんと勉強したいと思います。 また分からないことがあったらお聞きすると思いますが、そのときはまたよろしくお願いします。すごく助かりました。
本当にありがとうございました。

Excel VBA Macro