programing

Excel VBA 필터링/가시 셀

mytipbox 2023. 8. 6. 17:31
반응형

Excel VBA 필터링/가시 셀

데이터 행이 10개라고 가정합니다.데이터에 필터를 적용하면 7번과 9번 행이 필터링되거나 표시됩니다.

데이터(10개의 행)를 루프하고 표시되는 행(예: C7C9 범위)대해서만 빈 열(C열로 가정)에 "표시됨" 문자열을 출력합니다.

숨길 처음 10개 행 중 일부를 선택한 다음 실행해 보십시오.

Option Explicit

Sub CheckIfVisible()

Dim i As Integer, x As Integer
x = 0
For i = 1 To 10
    With Excel.ThisWorkbook.ActiveSheet
        If .Rows(i).EntireRow.Hidden Then
        Else
            .Cells(15 + x, 1) = "Row " & i & "is visible"
            x = x + 1
        End If
    End With
Next i

End Sub

이것이 당신이 찾고 있는 루프의 종류입니까?
문제가 어디에 있는지 확인할 수 있도록 루프를 보여주시겠습니까?

얼마 전에 이걸 찾으러 왔으니, 미래의 구글 사용자들에게 도움이 될 만한 것이 있습니다.

셀/행당 작업을 수행하는 경우 셀에 액세스하면 됩니다.전체 행.직접 숨김.

아래 예제에서는 선택의 각 셀을 통과하는 각 셀에 대한 루프일 뿐이며 셀의 속성만 읽고 에 따라 카운트/색상을 지정합니다.True/False로 숨김.

주의해야 할 위험이 있습니다.

필터링된 범위를 테스트하는 경우에는 해당 범위를 초과하는 행을 한 행씩 선택해야 합니다. 숨겨진 행이 범위의 끝/끝 행에 있는 경우 캡처되지 않을 수 있으므로 선택 후에 표시되는 첫 번째 행을 선택하면 이를 피할 수 있습니다.

넓은 범위(10,000개 이상의 행)에서는 매우 비효율적입니다.

테스트할 경우 Pasta 복사



Sub HowManyHiddenCells()

Dim MyCell, MyRange As Range
Dim CellCountAll, CellCountVisible, CellCountHidden As Integer

Set MyRange = Selection



For Each MyCell In MyRange

    ':: IGNORE EMPTY ::
    If Len(MyCell.text) > 0 Then

        If MyCell.EntireRow.Hidden Then
        MyCell.Interior.Color = RGB(255, 220, 200)
        ':: Count of hidden cells in range
        CellCountHidden = CellCountHidden + 1
        ':: Do Column C Text! ::
        MyCell.Offset(0, 2).FormulaR1C1 = "I was hidden! "
        End If
    
        If MyCell.EntireRow.Hidden = False Then
        MyCell.Interior.Color = RGB(200, 255, 180)
        ':: Count of visible cells in range
        CellCountVisible = CellCountVisible + 1
        End If
        ':: Count of all cells in range
        CellCountAll = CellCountAll + 1
    End If
Next MyCell


MsgBox "Cells total " & CellCountAll & vbNewLine & "Hidden :  " & CellCountHidden & vbNewLine & "Visible : " & CellCountVisible, vbOKOnly + vbInformation, "Count of hidden vs visible"

End Sub

작업 중인 스크립트의 예 - 빨간색으로 숨겨진 부분을 강조 표시하는 필터링된 범위

@q에서 영감을 받아 제가 이것을 생각해 낸 이유는 선택한 모든 표시되는 행을 반복합니다.

Sub Loop_through_selected_rows()
Dim rng As Range: Set rng = ActiveWindow.RangeSelection
Dim i As Integer
For i = 0 To rng.Rows.Count - 1
    If Cells(rng.Row + i, 1).EntireRow.Hidden Then
    Else
        Cells(rng.Row + i, 1).Range("A1:E1").Select 'Set Range within row to your needs
        ' Do something here
    End If
Next
End Sub

언급URL : https://stackoverflow.com/questions/14173445/excel-vba-filtered-visible-cell

반응형