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

下記の繰り返し作業をA列の値の入っている最後のセルまで行いたいのですが、ループで処理する事が出来ますか? 判る方がいましたら教えて下さい。宜しくお願い致します。

If Range("a1")>Range("c1") then
Range("a1:b1").delete
End If

If Range("a2")>Range("c1") then
Range("a2:b2").delete
End If

If Range("a3")>Range("c1") then
Range("a3:b3").delete
End If

A 回答 (1件)

こんにちは!



行削除のループの場合、最終行からループさせるのが基本的なやり方です。
一例です。

Sub Sample1()
 Dim i As Long
  For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
   With Cells(i, "A")
    If .Value > Range("C1") Then
     .Resize(, 2).Delete shift:=xlUp
    End If
   End With
  Next i
End Sub

こんな感じで行けると思います。

※ 極端にデータ量が多い場合はそこそこ時間を要してしまいます。
↓のコードは一気に削除しますので、時間短縮ができると思います。

Sub Sample2()
 Dim i As Long
 Dim myRng As Range
  For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
   If Cells(i, "A") > Range("C1") Then
    If myRng Is Nothing Then
     Set myRng = Cells(i, "A").Resize(, 2)
    Else
     Set myRng = Union(myRng, Cells(i, "A").Resize(, 2))
    End If
   End If
  Next i
   If Not myRng Is Nothing Then
    myRng.Delete shift:=xlUp
   End If
End Sub

まずはこの程度で・・・m(_ _)m
    • good
    • 1
この回答へのお礼

こんにちは。早々のご回答有難う御座いました。ご回答頂いたコードで希望通りの作業が行えました。特にsampl2は、一気に削除できるのでスムーズに作業が行えると感じました。今回、教えてもらったコードを良く理解し今後に役立てる様、勉強したいと思います。本当に有難うございました。

お礼日時:2020/05/16 06:25

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