Подсчет пустых ячеек после применения фильтра

Код считает пустые ячейки в столбце E, поэтому логика работает. Однако перед подсчетом пустых ячеек я хочу исключить «Наличные» из столбца H.

Код применяет фильтр к столбцу H (исключая денежные средства), однако пустые ячейки подсчитываются для данных, включая денежные средства.

Sub exampleTHis()

    ActiveSheet.Range("H:H").AutoFilter Field:=8, Criteria1: = "<>Cash", _
    Operator:=xlAnd

Dim ws As Worksheet, testRange As Range, aCount As Long, zAnswer

For Each ws In ThisWorkbook.Worksheets

Set testRange = Intersect(ws.Range("E:E"), ws.UsedRange)
 'Set testRange = ws.Range("E2", Range("E" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
 
    If Not testRange Is Nothing Then
        
        aCount = Application.WorksheetFunction.CountBlank(testRange)
        If aCount > 0 Then
         'blank cells found....
            zAnswer = MsgBox(aCount & " blank values found in at " & ws.Name & testRange.Address & ".  Continue macro?", vbYesNo)
            
            If zAnswer = vbNo Then Exit For
            
        End If
    End If
    
Next ws

End Sub

Вы хотите использовать это для всех рабочих листов (For Each ws In ...) в книге, содержащих этот код (ThisWorkbook), или для определенного? Если последнее, то как называется его (вкладка)? Являются ли эти пустые ячейки пустыми или в них есть формула, например. IfError(Something, "")? Скриншот вашего рабочего листа будет творить чудеса. Пожалуйста, добавьте любую дополнительную информацию к вашему сообщению.

VBasic2008 25.11.2022 22:21

только на одном листе в названии вкладки книги "активы"

Tartans 25.11.2022 22:24

а пустые ячейки пусты (в них нет формулы)

Tartans 25.11.2022 22:25
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
3
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подсчет пробелов в столбце с автоматической фильтрацией с использованием AutoFilter и SpecialCells

  • Усложнения необходимы, чтобы иметь возможность писать адреса критических ячеек в окне сообщения. Вы можете упростить, если вы сразу после подсчета.
Sub CountBlanksInFilteredColumn()
    ' Not blank:           "<>"
    ' Blank:               "" or " = " (includes Empty)
    ' Blank but not empty: "<=>"
    ' Empty?
    
    Const SHEET_NAME As String = "Assets"
    Const BLANK_COLUMN As Long = 5
    Const BLANK_CRITERION As String = ""
    Const CASH_COLUMN As Long = 8
    Const CASH_CRITERION As String = "<>Cash"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Sheets(SHEET_NAME)
    
    Dim vrg As Range
    
    With ws
        If .FilterMode Then .ShowAllData ' clear filters
        Dim rg As Range: Set rg = ws.UsedRange
        Dim crg As Range ' without header
        With rg
            Set crg = .Columns(BLANK_COLUMN).Resize(.Rows.Count - 1).Offset(1)
            .AutoFilter BLANK_COLUMN, BLANK_CRITERION
            .AutoFilter CASH_COLUMN, CASH_CRITERION
        End With
        On Error Resume Next
            Set vrg = crg.SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
        .AutoFilterMode = False ' turn off auto filter
    End With
    
    Dim Blanks As Long, vrgAddress As String
    
    If Not vrg Is Nothing _
        Then Blanks = vrg.Cells.Count: vrgAddress = vrg.Address(0, 0)
    
    MsgBox "Found " & Blanks & " blank cell" _
        & IIf(Blanks = 1, "", "s") _
        & IIf(Blanks = 0, ".", ":" & vbLf & vrgAddress), _
        IIf(Blanks = 0, vbExclamation, vbInformation)
    
End Sub

Продолжить, если нет пустых ячеек

    End With
    
    If Not vrg Is Nothing Then
        MsgBox "Found " & vrg.Cells.Count & " blank cell" _
            & IIf(Blanks = 1, "", "s") & ":" & vbLf & vrg.Address(0, 0), _
            vbExclamation
        Exit Sub
    End If
    
    ' No blanks found, continue with your code.

End Sub

можно ли не показывать всплывающее сообщение, если нет пустых ячеек вместо того, чтобы говорить 0 пробелов. Эта процедура является лишь частью всего макроса, поэтому остальная часть макроса продолжает выполняться, если нет пустой строки. всплывающее сообщение похоже на обработчик ошибок, который останавливает поток, если есть пустые ячейки.

Tartans 26.11.2022 01:59

Другие вопросы по теме