VBA 코드를 사용하여 필터링된 목록의 빈 셀 계산에 대한 VBA 디버그

VBA 코드를 사용하여 필터링된 목록의 빈 셀 계산에 대한 VBA 디버그

대답이 분명하다면 사과드립니다. VBA를 일주일 동안만 사용해 왔습니다. 별도의 시트에서 셀을 필터링한 다음 필터링된 목록에 남아 있는 공백 수를 계산하고 싶습니다. 나는 기존 답변에서 코드 기본 사항을 얻었으므로 직접 만들지 않았고 거의 작동하지만 이것을 3 시간 동안 쳐다보고 다른 것을 시도한 후에 물어볼 것이라고 생각했습니다.

코드는 결과를 생성합니다. 매번 올바른 것보다 1이 더 많으므로 필터링된 목록에 두 개의 공백이 있지만 출력은 3입니다. 목록에 대한 모든 종류의 조정을 시도했지만 항상 예상보다 1이 더 많습니다. 필터링 중인 목록의 사진을 첨부해 보겠습니다.

또한 범위의 끝을 동적으로 찾고 필터를 적용하는 코드도 있습니다. 이 비트가 작동하게 되면 'unfilter' 코드 줄도 추가하겠습니다.

Sub BlankCheck()
    ' Find last free row
    Dim lRow As Long
        lRow = Worksheets(2).Cells.Find(What:="*", _
            After:=Range("A1"), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
    
    ' Filter
    Worksheets(2).UsedRange.AutoFilter Field:=1, Criteria1:="test"
    
    ' Count visible blanks
    Worksheets(1).Cells(1, 1) = Range(Worksheets(2).Cells(1, 2), Worksheets(2).Cells(lRow, 2)). _
    SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Count
    
End Sub

도움을 주셔서 미리 감사드립니다.

필터링되지 않은 목록 이미지

답변1

이것이 반환되는 이유를 알려면 3현재 열에 내용이 있는 표시되는 셀을 찾고 있다는 것입니다 B. 따라서 헤더와 필터가 적용된 후 내용이 있는 두 개의 셀이 포함됩니다.


목표가 A열의 기준에 따라 빈 셀 수를 반환하는 것이라면 다음을 사용할 수도 있습니다.

Sub Test()

With ThisWorkbook.Worksheets("Sheet1")
    Debug.Print Application.WorksheetFunction.CountIfs(.Range("A:A"), "test", .Range("B:B"), "")
End With

End Sub

샘플 데이터에서 이는 를 반환합니다 2.

관련 정보