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

Как такое сделать подскажите пожалуйста.
...
Рейтинг: 0 / 0
17.03.2010, 09:12
    #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
17.03.2010, 09:59
    #36525383
revda.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Видимо я совсем новичек, а куда мне это вставить ?
В модуль я вставил, а оно не реагирует, надо событие же определить где-то, я на Дельфи писал немного.
...
Рейтинг: 0 / 0
17.03.2010, 10:09
    #36525401
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
revda.info,

Это надо вставить в код объекта нужного листа.
...
Рейтинг: 0 / 0
17.03.2010, 13:28
    #36526006
revda.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Ура, сработало, а как теперь сделать это для всей колонки 'А' ?
...
Рейтинг: 0 / 0
17.03.2010, 13:46
    #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
17.03.2010, 13:58
    #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
17.03.2010, 14:02
    #36526135
revda.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Да нет, это не важно, любые изменения надо, только я хотел найти изменения не в одной ячейке а в целом столбце (исключая некоторые, впрочем это тоже не критично)

Я jkeks - и вот мой http://jkeks.ru
...
Рейтинг: 0 / 0
17.03.2010, 14:11
    #36526170
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Без VBA (меню Сервис-Параметры-Вычисления-Итерации).
...
Рейтинг: 0 / 0
17.03.2010, 14:35
    #36526238
revda.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Без VBA - неожиданный вариант ;) пожалуй будет работать и в OpenOffice но с сылками как быть ?
...
Рейтинг: 0 / 0
17.03.2010, 14:35
    #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
17.03.2010, 14:37
    #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
17.03.2010, 14:55
    #36526314
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
revda.infoБез VBA - неожиданный вариант ;) пожалуй будет работать и в OpenOffice но с сылками как быть ?
С какими ссылками? OpenOffice не знаю.
...
Рейтинг: 0 / 0
18.03.2010, 07:22
    #36527367
revda.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Hugo121, Djon Player !! Спасибо!
...
Рейтинг: 0 / 0
10.05.2010, 01:00
    #36619303
yalomak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
vikttur,

А что за волшебная формула такая "=--(B1=0)"? Ничего подобного не видел. Где про это прочитать можно?
...
Рейтинг: 0 / 0
10.05.2010, 09:10
    #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
10.05.2010, 12:45
    #36619510
yalomak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать счетчик изменений ячейки ?
Спасибо, Hugo121!

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

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

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

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

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


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