powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как сделать счетчик изменений ячейки ?
24 сообщений из 24, страница 1 из 1
Как сделать счетчик изменений ячейки ?
    #36525204
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ячейка в ней цифры или буквы (пусть это ячейка А1), надо в B1 поместить счетчик изменений ячейки А1. т.е. если я менял значение в А1 3 раза, то в В1 должно быть 3.

Как такое сделать подскажите пожалуйста.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36525290
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
revda.info,
Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
[b1] = [b1] +  1 
End Sub

Ещё можно не допускать активации ячейки B1, чтобы исключить её изменение со стороны. Но это другой вопрос.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36525383
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо я совсем новичек, а куда мне это вставить ?
В модуль я вставил, а оно не реагирует, надо событие же определить где-то, я на Дельфи писал немного.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36525401
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info,

Это надо вставить в код объекта нужного листа.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526006
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура, сработало, а как теперь сделать это для всей колонки 'А' ?
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526067
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал ну совсем уж чушь и она не работет:

Код: plaintext
1.
2.
3.
4.
5.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
'[b1] = [b1] + 1
Target.Row = Target.Row +  1 
End Sub

Я jkeks - и вот мой http://jkeks.ru
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526116
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121
Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
[b1] = [b1] +  1 
End Sub
Всё немного сложнее, я думаю: нужно отслеживать текущее значение ячейки A1 и, если оно совпадает с вновь введённым, НЕ ОБНОВЛЯТЬ счётчик.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526135
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, это не важно, любые изменения надо, только я хотел найти изменения не в одной ячейке а в целом столбце (исключая некоторые, впрочем это тоже не критично)

Я jkeks - и вот мой http://jkeks.ru
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526170
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без VBA (меню Сервис-Параметры-Вычисления-Итерации).
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526238
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без VBA - неожиданный вариант ;) пожалуй будет работать и в OpenOffice но с сылками как быть ?
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526241
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info,


Для всей колонки A можно написать как-то так:
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("A")) Is Nothing Then Exit Sub
  With Target.Offset( 0 ,  1 )
   .Value = .Value +  1 
  End With
End Sub
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526248
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Columns("A")) Is Nothing Then
   Exit Sub
  Else
   With Target.Offset( 0 ,  1 )
     .Value = .Value +  1 
   End With
 End If
End Sub
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36526314
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.infoБез VBA - неожиданный вариант ;) пожалуй будет работать и в OpenOffice но с сылками как быть ?
С какими ссылками? OpenOffice не знаю.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36527367
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121, Djon Player !! Спасибо!
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36619303
yalomak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikttur,

А что за волшебная формула такая "=--(B1=0)"? Ничего подобного не видел. Где про это прочитать можно?
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36619373
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yalomak,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Про два тире " -- "

Объяснение от ZVI :)
В Excel есть так называемое неявное преобразование типов. Например, формула ="2" *  3 , перемножающая текстовое значение "2" на числовое, автоматически преобразует текстовое значение "2" в числовое  2 . Результат будет равен  6 , как будто перемножались два числа.
Такое преобразование происходит при любым математических действиях: сложении, вычитании, умножении, возведении в степень и проч., включая смену знака на противоположный. Так -"2" автоматически преобразуется в отрицательное число - 2 .
А если еще раз сменить знак --"2", то получим число  2 .
Если записать в ячейку формулу: =-(-"2") и с помощью меню Сервис - Зависимости формул - Вычислить формулу - Вычислить( 2  раза) посмотреть, что с ней сделает Excel, то эволюция будет такой: -(-"2"), потом -(- 2 ), а затем  2 .
Важно отметить, что если записать формулу без скобок =--"2", то --"2" преобразуется в число  2  без промежуточных действий (в одно действие).
Аналогичные преобразования будут и при добавлении к текстовому значению нуля ="911"+ 0 , умножении текста на единицу ="02"* 1  и прочих математических действиях, не меняющих результата мат. выражения.
Подобные преобразования Excel выполняет не только с текстовыми значениями, но и с логическими:
=ЛОЖЬ+ 0  или =ЛОЖЬ* 1  или =--ЛОЖЬ дает  0 , так как логическое значение ЛОЖЬ автоматически преобразуется в  0  (ноль).
=ИСТИНА+ 0  или =ИСТИНА* 1  или =--ИСТИНА дает  1 , так как логическое значение ИСТИНА автоматически преобразуется в  1 .
Любое математическое действие само по себе запускает механизм преобразования в числа текстовых значений математического выражения:
="3"+"5" выдает числовое значение  8 
Собственно, поэтому =СУММПРОИЗВ(--(Выражение1=Условие); --(Выражение2)) можно заменить на =СУММПРОИЗВ((Выражение1=Условие)*(Выражение2)), т.к. математическое действие умножения автоматически запускает механизм преобразования типов множителей, и дополнительных преобразователей типа двойного отрицания уже не требуется.
Ну и, наконец, почему всё же часто используют именно двойное отрицание, а не добавление нуля или умножение на единицу?
Ответ прост: двойное отрицание теоретически выполняется быстрее умножения на  1 , сложения с нулем и других математических действий. Экономия времени вычисления небольшая, и по некоторым оценкам составляет примерно  15 %
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36619510
yalomak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Hugo121!

И всё-таки до меня никак не допрет, не могу понять принцып действия. В данном файле, который без VBA (спасибо vikttur), в ячейке B1 стоит формула =--(B1=0). Вроде бы, зачем использовать два минуса, если они ничего не меняют? Это первое, что мне не понятно. И главное, почему-то без них ничего не работает.

Второе, не понятно, зачем там такие красивые формулы ЕСЛИ, если логическое выражение - всегда ЛОЖЬ. И поэтому не понятно, как же эти формулы распознают, что было изменение.

Кажется, пока писал это сообщение, то понял! Фишка, по-видимому, в том, что вычисления происходят два раза. Сначала, когда в ячейке В1 раскрывается один минус и получается ИСТИНА, то в соответствующих ячейках происходят соответствующие изменения. А затем, когда второй минус меняет значение на ЛОЖЬ, то опять происходят соответствующие изменения! Так? )))))

ОГО! Если это так, то это ппц какой мощный инструмент! )))) Большое спасибо за урок!
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36619533
yalomak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, написал принцип через "ы" )))
Только что я заметил, что всё прекрасно работает и с одним минусом. Зачем тогда в той формуле стоят два минуса? Объясните, пожалуйста, новичку.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36619644
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yalomak,
вообже-то двойной минус - чтоб из текста сделать число, и именно не меняя знак. Т.е. например из "1" получить 1, а из "-1" -1. А из TRUE получить 1. Хотя может в данном случае всё равно, -1 или 1.
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36622182
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yalomak,
=--(B1=0)
-- преобразуют ИСТИНА в единицу, а ЛОЖЬ в ноль.
Посмотрите в меню Сервис-Параметры-Вычисления-Итерации-Количество_итераций=2, т.е. лист автоматически пересчитывается два раза. но это происходит быстро и мы видим только последний результат.
Допустим, в исходном состоянии B1=0. При первом пересчете в В1 появится единица (B1=0, т.е. ИСТИНА), второй пересчет покажет ноль (B1=1, т.е. ЛОЖЬ).
Для проверки поставьте Количество_итераций=1 и ручной пересчет (по F9).
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36626860
yalomak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikttur,

да, а что включены итеррации, я даже и не посмотрел. Теперь я понял, спасибо! Но всё-таки формулы в данном примере прекрасно работают и с одним минусом )))
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36627058
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yalomakНо всё-таки формулы в данном примере прекрасно работают и с одним минусом )))
Аккуратнее, не делайте далекоидущих выводов. В данном примере работает, но только потому, что другие формулы ( =ЕСЛИ($B$1;... ) определяют, в B1 ноль или другое значение, отличное от нуля.
И кстати, =--(B1=0) спокойно заменяется на =(B1=0)*1 или =(B1=0)+0
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36959619
Finish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если Всё немного сложнее нужно отслеживать текущее значение ячейки A1 и, если оно совпадает с вновь введённым, НЕ ОБНОВЛЯТЬ счётчик
как это реализовать?
...
Рейтинг: 0 / 0
Как сделать счетчик изменений ячейки ?
    #36961323
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FinishА если Всё немного сложнее нужно отслеживать текущее значение ячейки A1 и, если оно совпадает с вновь введённым, НЕ ОБНОВЛЯТЬ счётчик
как это реализовать?макросом, тут же показывали.
тока имейте ввиду, что за ячейкой лучше всего следить при помощи RefEdit (ведь там может быть что угодно, формула, например). описано тут
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как сделать счетчик изменений ячейки ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]