#excel #vba
#excel #vba
Вопрос:
У меня есть два листа с данными, и я хотел бы удалить строки на листе 1, если совпадают два критерия. Я составил мысленную карту идеи, чтобы ее было легче понять.
Я выполнил самую первую часть кода, которая удаляет строки при совпадении одного критерия, но она также удаляет пустые строки, которые я хотел сохранить.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim iListCount As Long
Dim x As Variant
Dim iCtr As Long
iListCount = Sheets("Sheet1").Cells(Rows.Count, "N").End(xlUp).Row
For Each x In Sheets("Laoseis").Range("B4:B" amp; Sheets("Sheet1").Cells(Rows.Count, "N").End(xlUp).Row)
For iCtr = iListCount To 16 Step -1
If x.Value = Sheets("Sheet1").Cells(iCtr, 14).Value Then
Sheets("Sheet1").Cells(iCtr, 14).EntireRow.Delete
End If
Next iCtr
Next
Application.ScreenUpdating = True
End Sub
Комментарии:
1. Вы можете указать условие И в своем if (или несколько), что-то вроде
If x.Value = Sheets("Sheet1").Cells(iCtr, 14).Value amp; x.Value <> "" Then Sheets("Sheet1").Cells(iCtr, 14).EntireRow.Delete
(если у вас есть только одна строка в вашем if, которую нужно выполнить, вы можете поместить ее в ту же строку и закончить, если это не обязательно). Я не полностью прочитал ваш код и логику, но чтобы применить 2 условия к тому, что у вас там есть, вот как я бы к этому подошел.
Ответ №1:
Я думаю, вы можете использовать следующее:
Option Explicit
Private Sub CommandButton1_Click()
Dim iListCount As Long, iCtr As Long
Dim cell As Range
Application.ScreenUpdating = False
With ThisWorkbook
iListCount = .Sheets("Sheet1").Cells(Rows.Count, "N").End(xlUp).Row
For Each cell In .Sheets("Laoseis").Range("B4:B" amp; iListCount)
For iCtr = iListCount To 16 Step -1
If cell.Value = .Sheets("Sheet1").Cells(iCtr, 14).Value And cell.Value <> "" Then
.Sheets("Sheet1").Cells(iCtr, 14).EntireRow.Delete
End If
Next iCtr
Next cell
End With
Application.ScreenUpdating = True
End Sub