VBA удаляет строки, если есть пробелы или 1 или «Safe», но сохраняет пустые ячейки, содержащие 1 или «Safe», используя формулу

VBA удаляет строки, если есть пробелы или 1 или «Safe», но сохраняет пустые ячейки, содержащие 1 или «Safe», используя формулу

Я хочу удалить пустую ячейку из диапазона, T2:T200сохранив данные в безопасности, если ячейка пуста, с помощью ""или 1 (=if(b2<>"",1,"")или (=if(b2<>"","safe","")без использования цикла

Sub remove_blankrows()
Range("T2:T200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

решение1

Вы можете добиться этого, используя подход на основе формулы в VBA. Чтобы удалить строки, содержащие пустые ячейки в диапазоне T2:T200, оставив ячейки со значением 1 или «Safe» нетронутыми:

Sub remove_blankrows()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1") ' Replace "Sheet1" with your actual sheet name
    
    ' Apply the formula to identify rows to delete
    ws.Range("U2:U200").Formula = "=IF(OR(T2="""", T2=1, T2=""Safe""), """", ""Delete"")"
    
    ' Filter and delete rows based on the formula result
    ws.Range("U2:U200").AutoFilter Field:=1, Criteria1:="Delete"
    ws.Range("U2:U200").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ws.AutoFilterMode = False
    
    ' Clear the temporary formula column
    ws.Range("U2:U200").ClearContents
End Sub
  1. Диапазон U2:U200 используется как временный столбец для применения формулы, которая помечает строки для удаления на основе критериев.
  2. Формула проверяет, является ли соответствующая ячейка в столбце T пустой (""), 1 или "Безопасной", и возвращает пустую строку (""), указывающую на то, что строку следует удалить.
  3. После применения формулы код устанавливает автофильтр для временного столбца и фильтрует строки, помеченные как «Удалить».
  4. Затем он удаляет видимые строки и очищает временный столбец формулы.
  5. Наконец, автофильтр отключается.

Связанный контент