Страницы: 1
RSS
Счётчик выполнения условия в ячейке.
 
Здравствуйте. Прошу посоветовать по следующему вопросу: не удаётся считать (1, 2, 3, 4, 5...) количество выполнения условия в ячейке.
Итак, в ячейке A1 согласно заданной формуле (то есть не вводом вручную, а в фоновом режиме) появляются различные значения. Нужно, чтобы при каждом появлении в этой ячейке значения "Взлёт", значение в другой ячейке B1, начиная с 1, изменялось на один порядковый номер (то есть становилось 2, 3, 4, 5, 6 и т. д.)
1. Пытался найти решение, перебирая всевозможные формулы, но выдаётся ошибка о циклической ссылке.
2.1. Пытался решить задачу макросом (привожу ниже), но в этом случае при наступлении в ячейке А1 ожидаемого события, значение в ячейке B1 увеличивается на единицу (то есть текущее значение + 1) не один раз, а бесконечное количество...
Код
Private Sub Worksheet_Calculate()
If [A1] = "Взлёт" Then Call Vzlet_counter
End Sub

Sub Vzlet_counter()
Application.EnableEvents = False
Range("B1")= Range("B1") + 1
Application.EnableEvents = True
End Sub
2.2. Пробовал этот же макрос, но уже с Worksheet_Change(ByVal Target As Range), однако такое решение тоже не работает, так как ячейка A1 изменяется не вручную, а автоматически с помощью формулы с условием ЕСЛИ().

Таким образом, получается, что: Worksheet_Change(ByVal Target As Range) не видит изменений в ячейке А1, а Worksheet_Calculate() их видит, но начинает увеличивать счётчик в ячейке B1 до бесконечности (к сожалению, Application.EnableEvents = False почему-то не спасает от бесконечного исполнения макроса).  
Возможно ли решить задачу?
 
Код следует оформлять тегом.
Ищите по форуму темы с изменения по DDE. Если ячейка одна или их немного - можно использовать TextBox на листе, связав его с ячейкой и отслеживать изменения уже в нём.
 
Где-то я уже сегодня на этот вопрос ответил...
paylevan - не подскажете где?


Сам вспомнил - http://www.programmersforum.ru/showthread.php?t=247898

"Спасибо за вариант решения, но мне не удаётся его реализовать. Если возможно, прошу отправить файл с примером." - файл в обмен на файл, иначе не возможно  :)
Изменено: Hugo - 14.11.2013 21:04:34
 
Если бы у меня был файл, который может Вам помочь, то отправил бы. При этом буду признателен, если Вы сможете, всё же, выложить файл с примером решения задачи. Я попытался запустить ранее предложенный Вами код, но, к сожалению, пока не удалось получить положительного результата.
 
Ну попробуйте тогда мой вариант.  Вариант Игоря не видел))
 
Юрий, я твой вариант тоже не видел :)
 
По крайней мере ты понял, о чём я))
 
Теперь понял :)
Да, с текстбоксом уже статик переменная не нужна.
 
Сделал с циклическими ссылками...
 
Radioalex, а так?
=ЕСЛИ(A1="Взлет";B1+1;B1)
При количестве итераций - 1
 
А если количество итераций много? Уже долгое время пытаюсь найти ответ на этот вроде бы простой вопрос...

Но все формулы так или иначе получаются циклическими, а макросы либо вовсе не реагируют на фоновое изменение в ячейке А1 (при использовании Worksheet_Change(ByVal Target As Range)), либо начинают самоисполняться бесконечное количество раз (при использовании Worksheet_Calculate()).

Неужели никак нельзя сделать обычный стандартный счётчик, чтобы в ячейке B1 просто прибавлялась 1 при каждом автоматическом (ввод НЕ вручную) наступлении события "Х" в ячейке А1 (например, при удовлетворении условию формулы или импорте определённого значения)?
 
Я уже сделал, и работало - когда писал ответ. Но с работы файл отсылать не хотел. Тем более что он совсем не был похож на Ваш...
Но с текстбоксом действительно будет лучше.
Изменено: Hugo - 17.11.2013 02:06:41
 
Вы мой вариант пробовали?
 
Юрий М, я пробовал всё, что представляется возможным. Однако, к сожалению, пока не удаётся найти решение.
 
См. файл.
 
Юрий М, сегодня протестировал Ваш вариант.

Спасибо большое, это то, что было нужно!

P. S.
В целом, конечно, не думал, что обычный счётчик придётся делать через скрытый ActiveX-элемент. Странно, что в Excel нет встроенной функции/формулы для стандартного подсчёта тех или иных событий - ведь это, как мне кажется, весьма универсальная потребность.
 
Мой вариант тоже был рабочий, но с текстбоксом нет нужды ловить событие пересчёта, соответственно механизм срабатывает только при изменении отслеживаемого значения, что оптимально.
Страницы: 1
Наверх