Скрыть строки на основе значения нескольких столбцов, если число равно 0 с аргументом в функции - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужна функция, в которой я передаю отфильтрованный диапазон данных в качестве аргумента функции HideRangeIfEmpty.Тем не менее, мой код скрывает все строки, которые являются пустыми в цикле.

Ожидаемый результат - строка должна быть скрыта, только если количество отфильтрованных видимых данных (например, G5, T5, AG5 равно нулю)это ноль.

Case "UsGe"
Application.ScreenUpdating = False
ActiveSheet.Range("F:BC").EntireColumn.Hidden = True
ActiveSheet.Range("G:G,T:T,AG:AG").EntireColumn.Hidden = False
Range("a1").Select
Call HideRangeIfEmpty("G6:AG200")

Private Sub HideRangeIfEmpty(R1)
For Each xRg In Range(R1)
    If xRg.Value = "" Then
      xRg.EntireRow.Hidden = True
     Else
      xRg.EntireRow.Hidden = False
    End If
   Next xRg
 End Sub

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете обращаться к соответствующим столбцам как к отдельным областям, задавая их в виде нескольких диапазонов:

Private Sub UsGe()
    ' ...
    Call HideRangeIfEmpty(ActiveSheet.Range("G6:G200, T6:T200, AG6:AG200"))
End Sub

Если любое из значений столбца равно <> "", то будет показана строка, в противном случае нет:

Private Sub HideRangeIfEmpty(ByRef r As Range)
    Dim CurrentRow As Long, CurrentArea As Long, CurrentColumn As Long
    Dim ToBeShown As Boolean

    ' Check each row (defined by the first area)
    For CurrentRow = 1 To r.Areas(1).Rows.Count

        ToBeShown = False   ' default: not hidden

        ' check each area (one or more columns)
        For CurrentArea = 1 To r.Areas.Count

            ' check cell in each column
            For CurrentColumn = 1 To r.Areas(CurrentArea).Columns.Count

                ' If any has a value, then set the marker
                If r.Areas(CurrentArea).Cells(CurrentRow, CurrentColumn) <> "" Then _
                    ToBeShown = True
            Next CurrentColumn
        Next CurrentArea

        ' show complete row, if marker is set
        r.Areas(1).Cells(CurrentRow, 1).EntireRow.Hidden = Not ToBeShown
    Next CurrentRow
End Sub

Теперь он также работает с диапазонами, такими как "G6: I200", где мой код будет проверять столбцы G, H и I.

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