Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Добавленная в Excel VBA функция не пересчитывает значения автоматически (http://forum.oszone.net/showthread.php?t=337176)

subuday77 14-10-2018 17:06 2835847

Добавленная в Excel VBA функция не пересчитывает значения автоматически
 
Добрый день.
Возникла необходимость посчитать ячейки определённого цвета.
В сети пишут, что такой функции нет и надо дописать её самому, используя 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 2835854

Цитата:

Цитата subuday77
посчитать ячейки определённого цвета. »

Посчитать что? Их количество? Посчитать где? Все ячейки на Рабочем листе? Во всей Рабочей книге? В выделенном диапазоне?

Цитата:

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

Само собой. Даже волатильная функция данным способом не вызывается.

subuday77 14-10-2018 19:24 2835863

В общем, как я понимаю, автоматически, как обычная формула, работать не будет...
Жаль...

Iska 14-10-2018 23:37 2835890

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

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

subuday77 15-10-2018 09:16 2835920

Цитата:

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

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

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

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

Как-то так.

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

subuday77 15-10-2018 10:10 2835927

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

Работает.


Время: 07:27.

Время: 07:27.
© OSzone.net 2001-