Удалите все строки в таблице, которые имеют номер в столбце c.Следовательно, оставляя только те, с пробелами - PullRequest
0 голосов
/ 27 ноября 2018

Привет! Мне нужна помощь в написании кода, который удалит все строки с номером (это может быть любое число и может различаться по количеству цифр) в столбце 3 (или с).Я просто хочу сохранить строки, где столбец с пустым.Поскольку данные представляют собой таблицу, я знаю, что мне нужно использовать объекты списка, но я не могу заставить их работать.Я смог написать код для удаления всех строк с пустыми ячейками, но теперь хочу изменить код, чтобы оставить пустые ячейки.

Следующий код предназначен для удаления пробелов, которые я хочу изменить, чтобы сохранить их

Dim rng As Excel.Range
With Worksheets("Errors").ListObjects("Table2")
    On Error Resume Next
    Set rng = Intersect(.DataBodyRange, .ListColumns("Master List Row").Range).SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not rng Is Nothing Then
        rng.Delete
    End If
End With

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Я думаю, что ответ на этот похожий вопрос может дать вам хорошее представление о том, как с этим справиться.

Как удалить строку в Excel на основе значения ячейки?

0 голосов
/ 27 ноября 2018

Чтобы быстро удалить строки, вот хитрость: 1) добавить фиктивный столбец, 2) вставить туда формулу, которая определяет, есть ли число в ячейке или нет, 3) отфильтровать фиктивный столбец по True и 4) удалить строки:

Sub FFF()

    Dim iIndex%    
    Dim list As ListObject
    Dim dummyCol As ListColumn

    With Worksheets("Errors")
        Set list = .ListObjects("Table2")
        '// Index of dummy column
        iIndex = list.ListColumns("Master List Row").Index + 1
        '// Insert dummy column
        Set dummyCol = list.ListColumns.Add(iIndex)
        '// Insert formula to detect number in a cell
        dummyCol.DataBodyRange.Formula = "=ISNUMBER([@[Master List Row]])"
        '// Filter dummy column
        list.Range.AutoFilter Field:=iIndex, Criteria1:=True
        On Error Resume Next
        '// Remove all filtered rows.
        '// Error handler deals with a case when
        '// no rows are filtered.
        dummyCol.DataBodyRange.EntireRow.Delete
        On Error GoTo 0
        '// Remove filter
        list.AutoFilter.Range.AutoFilter
        '// Delete dummy column
        dummyCol.Delete
    End With

End Sub
0 голосов
/ 27 ноября 2018

Вы можете попробовать что-то вроде этого:

Dim rowsToDelete As Range
Dim cell As Range
For Each cell In rng
    If Not IsEmpty(cell) Then
        If rowsToDelete Is Nothing Then
            Set rowsToDelete = cell.EntireRow
        Else
            Set rowsToDelete = Union(rowsToDelete, cell.EntireRow)
        End If
    End If
Next
If Not rowsToDelete Is Nothing Then
    rowsToDelete.Delete
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...