subuday77
14-10-2018, 17:06
Добрый день.
Возникла необходимость посчитать ячейки определённого цвета.
В сети пишут, что такой функции нет и надо дописать её самому, используя VBA.
Также приводится множество вариантов написания.
Но ни один из них не пересчитывает значения автоматически, после изменения в диапазоне.
Например, отмечено 3 из 10 ячеек, вводим формулу, указываем диапазон, цвет - результат 3. Но если я после этого убираю цвет у одной из ячеек или крашу ещё одну, результат всё ещё 3.
Причём не помогает ни встать на ячейку с формулой и нажать <ENTER> ни F9.
Пересчёт происходит только после того, как я кликаю по полю редактирования формулы и нажимаю <ENTER>.
VBA, на котором я остановился:
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
Другая функция, которой я попытался воспользоваться:
Function ColorIndex(CellColor As Range)
ColorIndex = CellColor.Interior.ColorIndex
End Function
Всё тоже самое. Пересчёт только после "редактирования" формулы.
С этим можно что-то сделать или придётся жить с этим?
Возникла необходимость посчитать ячейки определённого цвета.
В сети пишут, что такой функции нет и надо дописать её самому, используя VBA.
Также приводится множество вариантов написания.
Но ни один из них не пересчитывает значения автоматически, после изменения в диапазоне.
Например, отмечено 3 из 10 ячеек, вводим формулу, указываем диапазон, цвет - результат 3. Но если я после этого убираю цвет у одной из ячеек или крашу ещё одну, результат всё ещё 3.
Причём не помогает ни встать на ячейку с формулой и нажать <ENTER> ни F9.
Пересчёт происходит только после того, как я кликаю по полю редактирования формулы и нажимаю <ENTER>.
VBA, на котором я остановился:
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
Другая функция, которой я попытался воспользоваться:
Function ColorIndex(CellColor As Range)
ColorIndex = CellColor.Interior.ColorIndex
End Function
Всё тоже самое. Пересчёт только после "редактирования" формулы.
С этим можно что-то сделать или придётся жить с этим?