#excel #vba #row #cell
#excel #vba #строка #ячейка
Вопрос:
У меня есть Excel с 5 разными листами. лист3 и лист4 я хочу удалить строки на основе значения ячейки одного столбца. на листе 3 я хочу удалить строки на основе значений ячеек столбца H, если H2 = «# N / A» и H503 = «# N / A», затем удалить целые строки. на листе 4 я хочу удалить строки на основе значений ячеек столбца b, если B2 =»320857876″, B3 =»32085678″, B4 = «12133435», удалите все строки, где значения ячеек столбца B начинаются с 302. и я хочу удалить все данные из столбца ‘C’ в моем Excelлист выглядит так
Sub Create()
Dim LastRow As Long
Dim i As Long
LastRow = Range("B10000").End(xlUp).Row
For i = LastRow To 1 Step -1
If Range("B" amp; i) = "#N/A" Then
Range("B" amp; i).EntireRow.Delete
End If
Next
End Sub
Ответ №1:
У вас есть несколько требований, и ваш код довольно легкий, но что касается #N/A
его части, вы не можете просто проверить этот текст, используя подход value, который является свойством по умолчанию, возвращаемым для объекта range.
Sub Create()
Dim LastRow As Long, i As Long
LastRow = Range("B10000").End(xlUp).Row
For i = LastRow To 1 Step -1
If Range("B" amp; i).Text = "#N/A" Then
Range("B" amp; i).EntireRow.Delete
End If
Next
End Sub
… вам нужно использовать .Text
, чтобы заставить это работать, или, If IsError(Range("B" amp; i)) Then
это другой подход.
Остальные ваши требования — это просто логика. Остальная часть вашего кода относительно надежна, поэтому вам просто нужно с ней поработать.
Надеюсь, это поможет.
Ответ №2:
Sub delete_rows()
Dim sheet As Worksheet, cell As Range
Count = 1
For Each sheet In ThisWorkbook.Worksheets
If Count = 3 Then
lastrow = sheet.Cells(sheet.Rows.Count, "H").End(xlUp).Row
Set Rng = sheet.Range("H1:H" amp; lastrow)
For i = Rng.Cells.Count To 1 Step -1
If Application.WorksheetFunction.IsNA(Rng(i).Value) Then
Rng(i).EntireRow.Delete
ElseIf Rng(i).Value = "#NA" Then
Rng(i).EntireRow.Delete
End If
Next
ElseIf Count = 4 Then
lastrow = sheet.Cells(sheet.Rows.Count, "B").End(xlUp).Row
Set Rng = sheet.Range("B1:B" amp; lastrow)
Debug.Print (Rng(4).Text)
If Rng(2).Value = "320857876" And Rng(3).Value = "32085678" And Rng(4).Value = "12133435" Then
For i = Rng.Cells.Count To 1 Step -1
If Left(Rng(i).Value, 3) = "302" Then
Rng(i).EntireRow.Delete
End If
Next
End If
lastrow = sheet.Cells(sheet.Rows.Count, "C").End(xlUp).Row
Set Rng = sheet.Range("C1:C" amp; lastrow)
For Each cell In Rng
cell.Value = ""
Next cell
End If
Count = Count 1
Next
End Sub