Как удалить строки, где есть номер в столбце «А»? - PullRequest
1 голос
/ 08 января 2020

В столбце «А» я пытаюсь удалить строки, начинающиеся с цифры. Так, например, на изображении, которое я разместил, я хочу, чтобы мой макрос удалил строки № 3 и 11.

 Sub RemoveNumbersFromColumnA()
  Dim X As Long, R As Long, Data As Variant
  Data = Range("A3", Cells(Rows.Count, "A").End(xlUp))
  For R = 3 To UBound(Data)
    For X = 3 To Len(Data(R, 3))
      If Mid(Data(R, 3), X, 3) Like "[0-9]" Then

      Rows("3:" & cell.Row - 1).Delete
Next
      Range("A3").Resize(UBound(Data)) = Data
Else if
End Sub

1 Ответ

0 голосов
/ 08 января 2020

Начиная с чего-то, что работает медленно, вот что:

Sub RemoveNumbersFromColumnA()

    Dim i As Long
    Dim wks As Worksheet
    Set wks = Worksheets(1)

    For i = 10 To 1 Step -1
        If IsNumeric(Left(wks.Cells(i, "A"), 1)) Then
            Debug.Print wks.Cells(i, "A"); " deleting..."
            wks.Cells(i, "A").Delete
        End If
    Next i

End Sub

Идея состоит в том, чтобы l oop назад и проверить, является ли самая левая часть содержимого ячейки цифрой c. Если это число c, распечатайте информацию в ближайшем окне и удалите ее. Это то, что вы получаете, нажимая F8 , например, шаг за шагом:

enter image description here

Затем вы можете продолжить, как сохранение строки, которые будут удалены в один диапазон, и удаляют этот диапазон только один раз в конце. Как этот:

Sub RemoveNumbersFromColumnA()

    Dim i As Long
    Dim myCell As Range
    Dim rowsToDelete As Range

    For i = 1 To 10
        Set myCell = Worksheets(1).Cells(i, "A")
        If IsNumeric(Left(myCell, 1)) Then
            Debug.Print myCell; " adding..."
            If rowsToDelete Is Nothing Then
                Set rowsToDelete = myCell.EntireRow
            Else
                Set rowsToDelete = Union(rowsToDelete, myCell.EntireRow)
            End If
        End If
    Next i

    If Not rowsToDelete Is Nothing Then
        rowsToDelete.Delete
    End If

End Sub
...