Функция VBA Loop для разных столбцов и листов - PullRequest
1 голос
/ 07 октября 2019

Моя проблема: у меня есть нижеприведенный «Исходный код», который работает для удаления строк со значением «0» в столбце Q для листов 3 и 4 рабочей книги.

Теперь мне нужно включить ту же функцию для листов 6 и 7, но на этот раз для столбца «C». Мне нужна помощь, чтобы зациклить функцию для дополнительных листов и другой столбец. Я не могу просто скопировать и вставить ту же функцию снова и перейти к диапазону столбцов, поэтому просто не уверен, что мне не хватает, чтобы позволить мне удалить значения «0» из столбца C на листах 6 и 7.

Dim deleteRow As Long
Dim ws As Worksheet

    For i = 3 To 4
        Sheets(i).Select

        Set ws = ActiveSheet

        For deleteRow = ws.Range("Q" & Rows.Count).End(xlUp).Row To 2 Step -1

            If ws.Range("Q" & deleteRow).Value = 0 Then
              Rows(deleteRow).EntireRow.Delete
            End If

        Next deleteRow
    Next
End sub

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Попробуйте создать Sub с параметрами и позже назовите его как хотите:)

Sub delR(startSheet As Long, endSheet As Long, setCol As String)

Dim deleteRow As Long
Dim ws As Worksheet

        For i = startSheet To endSheet
            Sheets(i).Select

            Set ws = ActiveSheet

            For deleteRow = ws.Range(setCol & Rows.Count).End(xlUp).Row To 2 Step -1

                If ws.Range(setCol & deleteRow).Value = 0 Then
                    Rows(deleteRow).EntireRow.Delete
                End If

            Next deleteRow
        Next

End Sub

Sub test_delR()

    Call delR(3, 4, "Q")
    Call delR(6, 7, "C")

End Sub
1 голос
/ 07 октября 2019

Дополнение к ответу @ Teamothy: если вы собираетесь работать по принципу петли с различными несмежными значениями, вы можете использовать решение Array(), например:

Dim arSheets() As Variant   ' this method works with Variant only
Dim arCols() as Variant
Dim i As Long

arSheets = Array(3, 4, 6, 7)
arCols = ("Q", "Q", "C", "C")

For i = LBound(arSheets) To UBound(arSheets)
    delR_mod arSheets(i), arCols(i)
Next

NB1: Очевидно, что delR_mod обработает только 1 лист и примет только два параметра.

NB2: Если вы используете только один массив, вы можете использовать For Each some_variant In arSheets или даже For Each some_variant In Array(3, 4, 6, 7)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...