Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2013, 11:54   #1
paylevan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 18
По умолчанию Счётчик выполнения условия в ячейке.

Коллеги, здравствуйте. Не удаётся решить вроде бы простую задачу - считать (1, 2, 3, 4, 5...) количество выполнения условия в ячейке.

Итак, в ячейке A1 согласно заданной формуле (то есть не вводом вручную, а в фоновом режиме) появляются различные значения. Нужно, чтобы при каждом появлении в этой ячейке значения "Взлёт", значение в другой ячейке B1, начиная с 1, изменялось на один порядковый номер (то есть становилось 2, 3, 4, 5, 6 и т. д.)

1. Пытался решить задачу всевозможными перекрёстными формулами, но выдаётся ошибка о циклической ссылке.

2. Пытался решить задачу макросом (привожу ниже), но в этом случае при наступлении в ячейке А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

Есть ли способ решения задачи?
paylevan вне форума Ответить с цитированием
Старый 14.11.2013, 12:26   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

а если так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If [A1] = "Взлёт" Then Call Vzlet_counter
End Sub
кстати
Цитата:
не один раз, а бесконечное количество...
не наблюдается
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 14.11.2013, 13:08   #3
paylevan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 18
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
а если так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If [A1] = "Взлёт" Then Call Vzlet_counter
End Sub
кстати

не наблюдается
Вся проблема состоит в том, что изменения в ячейке A1 не вводятся вручную, а появляются в фоновом режиме с помощью формулы с условием ЕСЛИ().

Именно поэтому предложенное Вами решение, к сожалению, не работает. Макрос с Worksheet_Change(ByVal Target As Range) актуален только лишь в том случае, если ячейка A1 изменяется вручную, а не автоматически.
paylevan вне форума Ответить с цитированием
Старый 14.11.2013, 13:24   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тогда разбирайте условие в формуле ЕСЛИ. Ведь что-то меняется, вот к изменению этого "чего-то" и привязывайте счётчик!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2013, 13:42   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно запоминать значение ячйки в переменную, и при срабатывании пересчёта сравнивать текущее с запомненным.
Код:
Private Sub Worksheet_Calculate()
    Static test$
    If [a1] = "Взлёт" Then
        If [a1] <> test Then
            Call Vzlet_counter
        End If
    End If
    test = [a1]
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 14.11.2013 в 13:49.
Hugo121 вне форума Ответить с цитированием
Старый 14.11.2013, 13:52   #6
paylevan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
тогда разбирайте условие в формуле ЕСЛИ. Ведь что-то меняется, вот к изменению этого "чего-то" и привязывайте счётчик!
Изменяемые данные импортируются из текстового файла, на основе которых, с помощью условия ЕСЛИ (), появляется либо не появляется значение "Взлёт" в ячейке А1.

В этом случае, Worksheet_Change(ByVal Target As Range) не видит этих изменений, а используемый мною Worksheet_Calculate() их видит, но начинает увеличивать счётчик в ячейке B1 до бесконечности (к сожалению, Application.EnableEvents = False почему-то не спасает от бесконечного исполнения макроса).
paylevan вне форума Ответить с цитированием
Старый 14.11.2013, 19:59   #7
paylevan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Можно запоминать значение ячйки в переменную, и при срабатывании пересчёта сравнивать текущее с запомненным.
Код:
Private Sub Worksheet_Calculate()
    Static test$
    If [a1] = "Взлёт" Then
        If [a1] <> test Then
            Call Vzlet_counter
        End If
    End If
    test = [a1]
End Sub
Здравствуйте. Спасибо за вариант решения, но мне не удаётся его реализовать. Если возможно, прошу отправить файл с примером.
paylevan вне форума Ответить с цитированием
Старый 14.11.2013, 21:42   #8
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Если возможно, прошу отправить файл с примером.
Вообще-то ТС прикладывает файл - пример с описанием задачи и тем, что уже сделано.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 14.11.2013, 22:21   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Кросс:
http://www.planetaexcel.ru/forum/ind...#message437573
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Примечание в ячейке при изменении значения в ячейке другого листа FoxRiver Microsoft Office Excel 4 12.07.2013 08:46
По выделенной ячейке выполняется Макрос1.После выполнения макроса ячейка остаётся активной(выделенной). vfv Microsoft Office Excel 4 06.02.2011 00:56
Как скрыть строку при выполнении условия в другой ячейке Алексей777 Microsoft Office Excel 4 09.12.2010 10:06
Присваивание ячейке значения в зависимости от условия DimonPS Microsoft Office Excel 3 12.11.2009 14:01