プロが教える店舗&オフィスのセキュリティ対策術

みなさん、こんにちは。今、社員の給与データをもとにExcel2000 で
ある集計をとるマクロを組んでいて、下記のような「給与額が0円の
データのみ削除する」マクロを組みました。

Sub データ削除()
Sheets("Sheet1").Select
Range("A1").Select
Dim 行 As Long
For 行 = 6226 To 2 Step -1
With Cells(行, 7)
If .Value > 0 Then Exit For
If .Value = 0 Then Rows(行).Delete
End With
Next
End Sub

このマクロで正しく動いているのですが、
For 行 = 6226 To 2 Step -1
の構文の 6226 が問題で、これは 6226行目から上に向かって行を削除してい
きます。
対象データの量が毎回違うので、データ量がマクロに指定されている行数より
多いと正しく動かないと思いますし、少なければ効率が悪くなるのではと思い
ます。
そこで、「データの一番下のセルから削除を始める」設定にしたいのですが、
どうしたらよいでしょうか?
ちなみに、データは給与額をキーに降順に並んでいて下の行から削除していく
ようになっています。

A 回答 (3件)

こんにちはpaku_iです。



列Aにはブランクの行が無いと仮定しますと
Range("A1").Select の下の行に
Selection.End(xlDown).Select を追加します。
すると一番下の CELL がアクティブになりますのでActiveCell.Row がここで言う 6226 になります。

ということで
最終行 = ActiveCell.Row
For 行=最終行 TO 2 Step -1
で良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

いや~。とっても助かりました。説明も良くわかりましたし、実際にやってみたらとってもうまく動きました。ありがとうございました。

お礼日時:2001/06/22 17:47

具体的なシートのイメージが無いので、想像で書きます。



案1.データ件数は分かりませんか、その件数から計算出来ないでしょうか。

案2.最後の行を見分ける為の目印はありますか?
   最後まで、同じ2行の組み合わせが続くのでしたら、
   スペース行が始まる場所を調べればいいかもしれません。
    • good
    • 0

うろ覚えですが、



CurrentRegion.Rows.Countで行数を取得できませんでしたっけ?

これを変数に放り込んだらよろしいかと存じます。
    • good
    • 0

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