PDA

Показать полную графическую версию : Добавленная в Excel VBA функция не пересчитывает значения автоматически


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
Всё тоже самое. Пересчёт только после "редактирования" формулы.

С этим можно что-то сделать или придётся жить с этим?

Iska
14-10-2018, 18:22
посчитать ячейки определённого цвета. »
Посчитать что? Их количество? Посчитать где? Все ячейки на Рабочем листе? Во всей Рабочей книге? В выделенном диапазоне?

Но если я после этого убираю цвет у одной из ячеек или крашу ещё одну, результат всё ещё 3. »
Само собой. Даже волатильная функция данным способом не вызывается.

subuday77
14-10-2018, 19:24
В общем, как я понимаю, автоматически, как обычная формула, работать не будет...
Жаль...

Iska
14-10-2018, 23:37
subuday77, будет. Но Вам-то сие чем поможет?! Событие пересчёта не возникает при форматировании ячеек, как бы Вы их не раскрашивали — данные-то никак не меняются.

Если Вы ответите на вопросы, заданные мною в предыдущем сообщении, возможно, я смогу Вам что-либо подсказать.

subuday77
15-10-2018, 09:16
Если Вы ответите на вопросы, заданные мною в предыдущем сообщении, возможно, я смогу Вам что-либо подсказать. »

С удовольствием! ))

Дано:
Столбец с цифровыми данными, идущими в разнобой.
Ячейка, в которой с помощью COUNTA подсчитанно общее количество занятых ячеек в столбце.
После проверки данных (типа, солдатик сбегал и посмотрел - посчитал), проверенные данные выделяются зелёным.

Задача:
После того, как ячейка помечена, как проверенная, убрать её из общего подсчёта.

Как-то так.

Я предложил вариант решения через CELL.
Но поскольку CELL c цветами напрямую не работает, приходится извращаться с форматами.
Если есть что-то поизящнее, буду рад и благодарен за помощь.

subuday77
15-10-2018, 10:10
Я нашёл удовлетворительное решение.
С помощью условного форматирования и формулы =not(isnumber(A1)) я перекрашиваю значения в зелёный цвет, если они не номера.
Пользователь проинструктирован, что для того, чтобы отметить ячейку, как проверенную, он должен перед номером поставить одиночную кавычку.
Внизу подсчёт с помощью COUNTIF(range,"*")

Работает.




© OSzone.net 2001-2012