2

VBAを使用して、列Bに値「X」が含まれるすべての行を削除しようとしています。ただし、次の 3 つの問題があります。

  1. VBA コードで、cells.find メソッドを使用してアクティブ セルから次のセル (B3) に移動できません (以下のコードを参照)。
  2. 私のコードは、値「X」が列 B にある行全体を削除しません。
  3. 列 B のデータ量は変動する可能性があります。今日は B10 で終了する場合もあれば、明日は B100 で終了する場合もあります (以下のスクリーン ショットを参照)。

どんな援助でも大歓迎です。

Sub RemoveRows()   
    Dim strLookFor As String
    Dim strRow As String

    Worksheets("Sheet1").Range("B2").Activate

    strLookFor = "X"
    strRow = Range("B2").Address

    Do Until ActiveCell.Value = ""        
        MsgBox (ActiveCell.Value)        
        If ActiveCell.Value = strLookFor Then
            Rows.Delete (strRow)
        End If            
        strRow = Cells.Find(what:=strLookFor).Address
    Loop

    MsgBox ("Deleted all rows with value " & strLookFor)    
End Sub

ここに画像の説明を入力

4

3 に答える 3

6

を使用するAutoFilterと、範囲ループよりもはるかに効率的です

Sub QuickCull()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("Sheet1")
Set rng1 = ws.Range(ws.[b2], ws.Cells(Rows.Count, "B").End(xlUp))
Application.ScreenUpdating = False
With ActiveSheet
        .AutoFilterMode = False
        rng1.AutoFilter Field:=1, Criteria1:="X"
        rng1.Offset(1, 0).EntireRow.Delete
        .AutoFilterMode = False
    End With
Application.ScreenUpdating = True
End Sub
于 2012-11-29T02:22:14.667 に答える
2
dim x as long
dim r as long
dim sht as worksheet

set sht = Worksheets("Sheet1")
r = sht.Cells(rows.count,2).end(xlup).row 

for x = r to 2 step -1
    with sht.cells(x,2)
        if .value = "X" then .entirerow.delete
    end with 
next x
于 2012-11-28T21:56:54.870 に答える
1

これはうまくいくはずです:

Sub DeleteRowsWithX()

maxRow = ActiveSheet.UsedRange.Rows.Count

For i = 1 To maxRow
    Do While (StrComp(ActiveSheet.Cells(i, 2).Text, "X", vbTextCompare) = 0)
        Rows(i).Select
        Selection.Delete Shift:=xlUp
   Loop
Next

End Sub
于 2012-11-28T21:56:32.857 に答える