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

一括で、不要な行の行全体を削除したいと考えています。
そのため、削除したい行には列Zに関数で2以上の数字を表示さています。
この列Zに数字の2以上が入っている行は全て削除するマクロをご教示ください。
なお、データは行A3からZ列までの1200行ほどあります。
どなたか、よろしくお願いいたします。

A 回答 (6件)

#2さん、どうやら、Z列がキーのようです。


更にいうと、データは3行目以降の様子です。

Sub 行の削除()
Dim gyou As Long
For gyou = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
If Range("Z" & gyou).Value >= 2 Then
Range("Z" & gyou).EntireRow.Delete
End If
Next gyou
End Sub


ところで、1200行あるとそれなりに時間がかかりそうですね。
(と言っても数秒でしょうけど。体感で5~7秒くらいかな。)


なので、私からの提案はオートフィルタを使って。
2行目が「項目行」で、3行目以降にデータがあるとして

Sub Sample()
Dim myRng As Range, myRow As Long
    If ActiveSheet.AutoFilterMode = True Then Range("A3").AutoFilter
    Set myRng = Range("A3").CurrentRegion
    myRow = myRng.Rows.Count + 1
    myRng.AutoFilter Field:=26, Criteria1:=">=2"
        On Error Resume Next
        Rows("3:" & myRow).SpecialCells(xlCellTypeVisible).Delete
        On Error GoTo 0
    myRng.AutoFilter
End Sub

こんな感じで。
(エラー処理が手抜きですけど(笑)。)


手動でフィルタをかけて、それを削除、としても一瞬ですから、
マクロを使わなくても結果(所要時間)はそんなに変わらないですけどね。
    • good
    • 0
この回答へのお礼

ご教示ありがとうございます。
また、返信が遅れました、申し訳ありませんでした。
処理時間も短くできましたので、ベストにさせていただきました。
ありがとうございます。
また、よろしくお願いいたします。

お礼日時:2013/07/10 22:35

VBAはわからん!な場合のために、手動で一気にやる方法も。


・・・と言っても、フィルタをかけるだけですが。

やはり前提として「2行目には“項目名行”がある」としています。
(無い場合は、3行目にダミーで“項目名行”を作ってやるとやりやすいです。)
そんなこんなで、A3セルにフォーカスを置き(選択した状態で)

(2007以降の場合)
リボンのデータタブ⇒フィルタ を選択。
各項目名のセルに▼がつくので、Z列の▼をクリックしてプルダウン。
数値フィルタ⇒指定の値以上 を選択し、ダイアログ内で「2以上」と設定し、OK。

(2003以前の場合)
データメニュー⇒フィルタ⇒オートフィルタ を選択
各項目名のセルに▼がつくので、Z列の▼をクリックしてプルダウン。
「オプション」を選択し、「2以上」と設定してOK。

(ここから共通)
フィルタがかかったら「項目名行の1行下に表示されている行」を選択。
Ctrl+Shift+(キーボードの)↓キーで、表示されている行を全選択。
反転している中で右クリック⇒削除 で行削除。
(または「Ctrl+テンキーボードの-(マイナスボタン)」でも行削除できます。)
上記と同様のやりかたでフィルタを解除。

以上で、「Z列が2以上」の行だけを削除することが出来ます。
#3での回答は、コレをマクロに書いてみただけです。


参考までに。



以下、私信で申し訳ありませんが・・

#5さん。
いえ、私も「2行目に“項目名行”が無い」可能性は視野外でした。
そうすると、「3行目にダミー行を入れ、最後に消す」手法が有効ですね。
「なるほど」な感覚です。
    • good
    • 0

No.4です。



投稿後に気づきました。
No.3さんの後者のやり方とほぼ同じやり方になっていました。

なおかつエラー処理をしていませんので、Z列に「2以上」のデータがない場合は
マクロが止まってしまいます。
どこか最初の方に
>On Error Resume Next
の1行を追加してもらえれば問題ないと思いますが・・・

それらを考慮すると
No.3さんの方が良いですね!

どうも失礼しました。m(_ _)m
    • good
    • 0

こんにちは!


1200行だというコトですので、ループさせてもさほど時間はかからないと思いますが、
一気に削除する方法です。


Sub 行削除()
Dim endRow As Long
Rows(3).Insert
Range("Z3") = "ダミー"
endRow = ActiveSheet.UsedRange.Rows.Count
Range("Z3").AutoFilter field:=1, Criteria1:=">=2"
Rows(3 & ":" & endRow).SpecialCells(xlCellTypeVisible).Delete shift:=xlUp
Rows(3).Delete
ActiveSheet.AutoFilterMode = False
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

tom04 様

いつもご教示ありがとうございます。
またお礼が遅くなり申し訳ありませんでした。

同じような回答でしたので、前者をベストにさせていただきました。
また、よろしくお願いいたします。

ありがとうございました。

お礼日時:2013/07/10 22:38

#1さん、連続してるとまずいから、下からね。



Sub 行の削除()
Dim gyou As Long
For gyou = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Range("a" & gyou).Value >= 2 Then
Range("a" & gyou).EntireRow.Delete
End If
Next gyou
End Sub
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
返信が遅れました、申し訳ありませんでした。
やはり処理時間が少しかかりますので、他をベストにさせていただきました。
また、よろしくお願いいたします。

お礼日時:2013/07/10 22:32

例えば次のようなマクロにします。



Sub 行の削除()
Dim gyou As Long
For gyou = 1 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
If Range("Z" & gyou).Value >= 2 Then
Range("Z" & gyou).EntireRow.Delete
End If
Next gyou
End Sub
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
返信が遅れました、申し訳ありませんでした。
処理時間が少しかかりますので、他をベストにさせていただきました。
また、よろしくお願いいたします。

お礼日時:2013/07/10 22:31

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