Скрыть несколько строк на основе значения диапазона нескольких ячеек VBA - PullRequest
0 голосов
/ 28 августа 2018

У меня есть лист (Sheet3) в рабочей книге, который я хотел бы написать VBA, чтобы скрыть несколько строк на основе значения ячейки в нескольких диапазонах. VBA должен был пройти через два разных шага; первый будет, если первая ячейка в указанном диапазоне будет пустой, а затем скрыть весь диапазон (кроме диапазона 1, так как первая ячейка никогда не будет пустой). Вторым шагом будет, если первая ячейка в диапазоне не пуста, а затем скрыть пустые строки в этом диапазоне. Вот особенности:

Диапазон 1

  1. A11: A60 - Скрыть пустые строки в диапазоне

Диапазон 2

  1. A71: A120 - Если ячейка A71 пуста, Скрыть A71: A120. В противном случае скрыть все пустые строки в диапазоне A71: A120.

Диапазон 3

  1. A131: A180 - Если ячейка A131 пуста, Скрыть A131: A180. В противном случае скрыть все пустые строки в диапазоне A131: A180.

Диапазон 4

  1. A191: A240 - Если ячейка A191 пуста, скрыть A191: A240. В противном случае скрыть все пустые строки в диапазоне A191: A240.

Диапазон 5

  1. A251: A300 - Если ячейка A251 пуста, скрыть A251: A300. В противном случае скрыть все пустые строки в диапазоне A251: A300.

    Public Sub HideRowsSummary()
    Dim wsMySheet As Worksheet
    Dim lngMyRow  As Long, unionRng As Range
    Application.ScreenUpdating = False
    For Each wsMySheet In ThisWorkbook.Sheets
       Select Case wsMySheet.Name
        Case Is = Sheet3
            .Range("A11:A60", "A71:A120", "A131:A180", "A191:A240", "A251:A300").EntireRow.Hidden = False
                For lngMyRow = 11 To 60
                    If Len(.Range("A" & lngMyRow)) = 0 Then
                        If Not unionRng Is Nothing Then
                            Set unionRng = Union(unionRng, .Range("A" & lngMyRow))
                        Else
                            Set unionRng = .Range("A" & lngMyRow)
                        End If
                    End If
                Next lngMyRow
            End With
        End Select
        If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
        Set unionRng = Nothing
    Next wsMySheet
    Application.ScreenUpdating = True
    

    End Sub

1 Ответ

0 голосов
/ 28 августа 2018

В вашем вопросе #2, 3, 4, 5 все следуют схожей логике.

Первые i петли займутся #1. Следующая часть кода занимается #2. Вы можете просто скопировать / вставить нижнюю часть и изменить значения теста, чтобы выполнить запрос.


Option Explicit

Sub HideMe()

Dim i As Integer

With ThisWorkbook.Sheets("Sheet3")
    For i = 11 To 60
        .Range("A" & i).EntireRow.Hidden = .Range("A" & i) = vbNullString
    Next i

    'Repeat this portion for you other ranges that follow the same rules
    If .Range("A" & 71) = vbNullString Then
        .Range("A71:A120").EntireRow.Hidden = True
    Else
        For i = 72 To 120
            .Range("A" & i).EntireRow.Hidden = .Range("A" & i) = vbNullString
        Next i
    End If
End With

End Sub

Это можно улучшить с помощью

A) Используйте цикл For Each вместо цикла For i Б) Вместо того, чтобы скрывать строки одну за другой, добавьте их в коллекцию строк как (Union) и скройте Union все сразу

...