Страницы: 1
RSS
удаление строк не на активном листе по условию
 
Здравствуйте, подскажите что нужно изменить в макросе, что б он удалял значение не на текущем листе, а на листе с названием лист8
например, все кнопки управления просто расположены на одном листе, и не удобно переключать листы
Код
Sub Del_SubStr()
    Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
    Dim lCol As Long      'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim lMet As Long
    Dim arr
 
    sSubStr = InputBox("Укажите значение, которое необходимо найти в строке",  "")
    If sSubStr = "" Then lMet = 0 Else lMet = 1
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", 1))
    If lCol = 0 Then Exit Sub
 
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    arr = Cells(1, lCol).Resize(lLastRow).Value
    Application.ScreenUpdating = 0
    Dim rr As Range
    For li = 1 To lLastRow 'цикл с первой строки до конца
        If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then
            If rr Is Nothing Then
                Set rr = Cells(li, 1)
            Else
                Set rr = Union(rr, Cells(li, 1))
            End If
        End If
    Next li
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub
 
так, наверно

Код
Sub Del_SubStr()
    Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
    Dim lCol As Long      'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim lMet As Long
    Dim arr
  
    sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "")
    If sSubStr = "" Then lMet = 0 Else lMet = 1
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", 1))
    If lCol = 0 Then Exit Sub
  
    With Sheets("лист8")
        lLastRow = .UsedRange.Row - 1 + .UsedRange.Rows.Count
        arr = .Cells(1, lCol).Resize(lLastRow).Value
        Application.ScreenUpdating = 0
        Dim rr As Range
        For li = 1 To lLastRow 'цикл с первой строки до конца
            If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then
                If rr Is Nothing Then
                    Set rr = .Cells(li, 1)
                Else
                    Set rr = Union(rr, .Cells(li, 1))
                End If
            End If
        Next li
        If Not rr Is Nothing Then rr.EntireRow.Delete
    End With
    Application.ScreenUpdating = 1
End Sub
Изменено: Михаил Витальевич С. - 22.09.2020 17:11:21
Страницы: 1
Наверх