если в столбце A текст «учетная запись клиента» и в столбце M <= 0 удаляются все строки между - PullRequest
0 голосов
/ 29 октября 2019

введите описание изображения здесь enter image description here

Попытка удалить полные строки, если критерии удовлетворены. Если в столбце A есть текст «счет клиента» и столбец M <= 0, удалите все строки между ними. Это не дает никакой ошибки, но не удаляет строки </p>

Dim sh As Worksheet

Set sh = Sheets("RAW DATA FILE")

Dim x As Long, lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For x = lastrow To 1 Step -1
    If Cells(x, 2).Value = "customer account" And Cells(x, 13) <= 0 Then
        Rows(x).Delete
    End If
Next x

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Ответом на текущую проблему может быть то, что вы используете ссылку на текущий активный лист. Вы дошли до объявления родительского листа (sh), но никогда не использовали его как таковой. Вы можете преодолеть это с помощью простого With:

Dim sh As Worksheet: Set sh = Sheets("RAW DATA FILE")
Dim x As Long, lastrow As Long

With sh
    lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
    For x = lastrow To 1 Step -1
        If .Cells(x, 2).Value = "customer account" And .Cells(x, 13) <= 0 Then
            .Rows(x).Delete
        End If
    Next x
End with

, который оставляет вопрос о том, есть ли лучшие, более быстрые способы получения вашего результата. Что касается @BigBen, вы должны изучить использование фильтра. Вы можете попробовать:

Dim sh As Worksheet: Set sh = Sheets("RAW DATA FILE")
Dim lastrow As Long
Dim rng As Range

With sh
    lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng = .Range("A1:M" & lastrow)
    rng.AutoFilter Field:=2, Criteria1:="customer account"
    rng.AutoFilter Field:=13, Criteria1:="<=0"
    rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    rng.AutoFilter
End With

Предполагается, что вы используете строку заголовка.


РЕДАКТИРОВАТЬ:

Если ваше намерениеЧтобы удалить весь диапазон строк, AutoFilter не является опцией nomore. В этом случае цикл сделал свое дело, но вам понадобится немного Offset, чтобы проверить значение столбца M:

Dim sh As Worksheet: Set sh = Sheets("Blad1")
Dim x As Long, lastrow As Long

With sh
    lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
    For x = lastrow To 1 Step -1
        If .Cells(x, 2).Value = "customer account" And .Cells(x, 13).Offset(4, 0) <= 0 Then
            .Range(x & ":" & x + 4).EntireRow.Delete
        End If
    Next x
End With

Это удалит строки между AND и проверяемыми строками. Если это не то, что вы хотите, то вы должны использовать: .Range(x+1 & ":" & x + 3).EntireRow.Delete

0 голосов
/ 29 октября 2019

Попробуйте с ниже

Dim sh As Worksheet
Set sh = Sheets("RAW DATA FILE")
Dim x As Long, lastrow As Long
lastrow = sh.Cells(Rows.Count, 1).End(xlUp).Row
For x = lastrow To 1 Step -1
    If sh.Cells(x, 1).Value = "customer account" And sh.Cells(x, 13) <= 0 Then
        sh.Rows(x).Delete
    End If
Next x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...