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