Excel VBA находит все остальные ячейки, а не каждую ячейку из метода - PullRequest
0 голосов
/ 06 февраля 2020

Excel VBA находит все остальные ячейки, используя метод проверки пустых ячеек. При следующем запуске того же макроса он находит ячейку, пропущенную при последнем запуске, и снова пропускает следующий экземпляр пустой ячейки. Если я перебираю макрос несколько раз, в конце концов, каждая строка без данных удаляется в соответствии с назначением макроса. Строки сдвигаются вверх после удаления строки по одному, я попробую объединение и удалю Range, как указано в @ BigBen

Когда найдена пустая ячейка, она проверяет столбцы A, B и D, чтобы увидеть, применяется ли формула, и если формула существует в этой строке, вся строка удаляется.

Dim cel, dataCells As Range
Dim rngBlank, dc As Range
Dim lastRow, cForm, c, blnkRange As String
Dim cycleTimes As Integer

On Error Resume Next

Set dataCells = Range("F2:W2").Cells    'This is header of the table of data
cycleTimes = dataCells.Count            'Number of times to cycle through macro

For Count = 1 To cycleTimes             'I don't want to cycle through macro
    lastRow = Range("N" & Rows.Count).End(xlUp).Row   'To find end of column
    For Each dc In dataCells
        c = Split(Cells(1, dc.Column).Address, "$")(1)    'Column Letter
        blnkRange = c & "3:" & c & lastRow                'Range to look over for empty cells
        Set rngBlank = Range(blnkRange).SpecialCells(xlCellTypeBlanks).Cells
        For Each cel In rngBlank                          '**Skipping Every other Row**
            If Not TypeName(cel) = "Empty" Then
                cForm = "A" & cel.Row & ",B" & cel.Row & ",D" & cel.Row  'Formula check
                If Range(cForm).HasFormula Then
                    cel.EntireRow.Delete
                End If
            End If
        Next
    Next
Next

Excel Range to be Deleted

1 Ответ

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

Мне удалось использовать Пересечение, чтобы найти строки, которые соответствуют критериям, которые я искал, и удалить «Целую строку», даже если выделение было в отдельных строках.

Set dataCells = Range("F2:W2").Cells

lastRow = Range("N" & Rows.Count).End(xlUp).Row  'To find last row to generate range to look through
For Each dc In dataCells                         'Have to perform delete row for every column
    c = Split(Cells(1, dc.Column).Address, "$")(1) 
    blnkRange = c & "3:" & c & lastRow
    Set rngBlank = Range(blnkRange).SpecialCells(xlCellTypeBlanks).EntireRow
    strFormula = "A2:A" & lastRow & ",B2:B" & lastRow & ",C2:C" & lastRow
    Set rngFormula = Range(strFormula).SpecialCells(xlCellTypeFormulas)
    Intersect(rngFormula, rngBlank).EntireRow.Delete (xlShiftUp)  '**THIS helped in deleting Rows**
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...