VBA - подсчет ячеек, которые скрыты и имеют определенное значение - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь выяснить, как можно написать код VBA, который подсчитывает, сколько ячеек в моем диапазоне скрыто и имеет определенное значение.

Я пробовал что-то подобное, но это не работает:

Sub Count_hidden_ABC()
Dim s As Long
Dim Rg As Range
Set Rg = Worksheets("Sheet1").Range("G8:G255")
s = Application.WorksheetFunction.CountIfs(Rg, "ABC", Rg, SpecialValues(12))

или

Sub Count_hidden_ABC()
Dim s As Long
Dim Rg As Range
Set Rg = Worksheets("Sheet1").Range("G8:G255")
s = Rg.SpecialCells(12).Application.WorksheetFunction.CountIf(Rg, "ABC")

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Special Cells feat. Области

  • Когда вы выбираете SpecialCells ( 12 ) или SpecialCells ( xlCellTypeVisible ) вы выбираете видимый клетки не те невидимые, которые вам нужны.
  • Не знаю точно, что происходит, но похоже, что CountIf не работает с несмежными диапазонами.
  • Таким образом, вы можете перебирать диапазоны в несмежном диапазоне, используя Область .

Код

Sub Count_hidden_ABC()

    Dim s As Long
    Dim Rg As Range
    Dim rng As Range
    Set Rg = Worksheets("Sheet1").Range("G8:G255")

    For Each rng In Rg.SpecialCells(12).Areas
        s = s + WorksheetFunction.CountIf(rng, "ABC")
    Next

    s = WorksheetFunction.CountIf(Rg, "ABC") - s
    'Debug.Print s

End Sub
0 голосов
/ 09 января 2019

Вы можете использовать этот код в качестве базы, он подсчитывает скрытые ячейки со значением "ABC" в указанном диапазоне:

Sub CountHiddenCellsInRange()
    Dim rng As Range, hiddenCells As Long, c As Range
    hiddenCells = 0
    Set rng = Range("A1:B5")
    For Each c In rng
        If (Rows(c.Row).Hidden Or Columns(c.Column).Hidden) And c.Value = "ABC" Then hiddenCells = hiddenCells + 1
    Next
    MsgBox hiddenCells
End Sub
...