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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 13:35   #1
crazyman_77
 
Регистрация: 21.01.2011
Сообщений: 8
По умолчанию данные в ячейках обновляются каждые 10 мин

Проблема в следующем: данные в ячейках А1,А2 и А3 обновляются каждые 10 мин. Как сделать так чтобы они выводились в соответствующий столбик? Например: "Показания ячейки А1"-1.Через 10 мин в ячейке А1 цифра изменилась на "2" и автоматически записалась под цифрой "1" в столбик "Показания ячейки А1" и т.д.
crazyman_77 вне форума Ответить с цитированием
Старый 21.01.2011, 13:37   #2
crazyman_77
 
Регистрация: 21.01.2011
Сообщений: 8
По умолчанию

Огромная просьба: объясните,пожалуйста мне эту процедуру "на пальцах",т.к. таких столбиков планируется гораздо больше и я хочу понять весь механизм действий.Заранее огромное спасибо!!!

P.S. Если такой вопрос уже был - прошу меня извинить и перенаправить по адресу.Я честно пытался найти что-то подобное, но за час поиска ничего не нашёл.
P.P.S. Честно говоря в примере прикреплять фактически нечего, но я вижу документ приблизительно таким.
Вложения
Тип файла: rar Например.rar (8.3 Кб, 12 просмотров)
crazyman_77 вне форума Ответить с цитированием
Старый 21.01.2011, 14:45   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в колонке В я дописал номера колонок, в которые будут переноситься данные из А
там буквально две строчки кода... даже не знаю что обьяснять на пальцах... это решение настраивается (в В пишете куда заносить данные и все). успехов!
Вложения
Тип файла: rar Книга538.rar (13.9 Кб, 20 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.01.2011, 15:04   #4
crazyman_77
 
Регистрация: 21.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
в колонке В я дописал номера колонок, в которые будут переноситься данные из А
там буквально две строчки кода... даже не знаю что обьяснять на пальцах... это решение настраивается (в В пишете куда заносить данные и все). успехов!
Спасибо большое, просто у меня это первые шаги.Ещё раз спасибо!
crazyman_77 вне форума Ответить с цитированием
Старый 21.01.2011, 16:57   #5
crazyman_77
 
Регистрация: 21.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
в колонке В я дописал номера колонок, в которые будут переноситься данные из А
там буквально две строчки кода... даже не знаю что обьяснять на пальцах... это решение настраивается (в В пишете куда заносить данные и все). успехов!
Вы всё сделали просто замечательно, всё работает так как мне хотелось, но пожалуйста, уделите ещё немного времени. Объясните пожалуйста (если не затруднит - пошагово) все Ваши действия. Всё работает просто замечательно, но я очень хочу научиться самостоятельно проделывать то же самое. Заранее огромное спасибо!
crazyman_77 вне форума Ответить с цитированием
Старый 21.01.2011, 23:14   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Long
If Target.Column <> 1 Then Exit Sub
If Target.Offset(0, 1) = "" Then
MsgBox "Укажите номер столбца...", vbCritical, "Не понятно, куда складывать данные!"
Exit Sub
End If
c = Target.Offset(0, 1)
Cells(Cells(Rows.Count, c).End(xlUp).Row + 1, c) = Target
End Sub

выбросим фрагмент, который отлавливает ошибки и сообщает об этом пользователю. остается:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Long
If Target.Column <> 1 Then Exit Sub
c = Target.Offset(0, 1)
Cells(Cells(Rows.Count, c).End(xlUp).Row + 1, c) = Target
End Sub

макрос стал в двое короче, соответсвенно теперь вдвое меньше обьяснять.
макрос этот срабатывает каждый раз, когда происходит изменение значения в какой-либо ячейке рабочего листа.
в качестве аргумента он получает диапазон (Target As Range), в котором произошло это самое изменение. в общем случае это может быть действительно диапазон ячеек или отдельная ячейка. Какие свойства и методы есть у обьекта Range Вы можете посмотреть в справке, предупреждаю - их довольно много.

If Target.Column <> 1 Then Exit Sub
свойство Column обьекта Target содержит номер колонки, в которой этот самый Target находится. итак, если колонка, в которой произошло изменение на равна 1 (т.е. изменения произошли не в первой колонке), прекращаем выполнение этой процедуры.

c = Target.Offset(0, 1)
метод Offset обьекта Target позволяет сослаться на другую ячейку, надо только указать сколько строк отсчитаь от текущей строки и сколько колонок от текущей. Target.Offset(0, 1) ссылается на ячейку находящуюся правее Target. а вся это конструкция звписывает значение из ячейки правее изменившейся в переменную с.

Cells(Cells(Rows.Count, c).End(xlUp).Row + 1, c) = Target
собственно эта строка решает вашу задачу: переносит значение из колонки А, в соответствующую колонку в первую пустаю ячейку.
конструкция Cells(10, 5) = 100 запишет 100 в ячейку находящуюся в 10-м ряду, в 5-й колонке.
ряд и колонку можно задать не числами, а переменными например Cells(R, C) = 100. надо только переменным R и C присвоить нужные значения.
колонку, куда записывать мы уже определили строкой раньше: c = Target.Offset(0, 1).
в связи с тем что Rows.Count - количество строк в листе, то Cells(Rows.Count, c) - это самая последняя ячейка в колонке с. напоминаю с мы только что определили.
метод End ячейки Cells(Rows.Count, c) с параметром xlUp укажет первую непустую ячейку, если перебирать ячейки вверх от ячейки из которой этот метод вызван.
т.е. Cells(Cells(Rows.Count, c).End(xlUp) - это первая непустая ячейка сверху от Cells(Rows.Count, c)
соответственно Cells(Cells(Rows.Count, c).End(xlUp).Row - это последний ряд (строка), в которой что-то есть, а Cells(Cells(Rows.Count, c).End(xlUp).Row+1 - это следующий ряд (строка) - т.е. в предыдущем ряду в колонке с было значение, а в этом нет, эта ячейка пустая, в нее-то мы и запишем изменившееся значение из Target.

поставлю точку на этом повествовании:
значение из Target мы записываем в ячейку, которая находится в колоке, значение которой находится в ячейке, которая находится правее Target и в строчке, которая содержит первую пустую ячейку, начиная сверху в колонке, значение которой находится в ячейке, которая находится правее Target.

получилось почти как у Маршака:
Вот два петуха,
Которые будят того пастуха,
Который бранится с коровницей строгою,
Которая доит корову безрогую,
Лягнувшую старого пса без хвоста,
Который за шиворот треплет кота,
Который пугает и ловит синицу,
Которая часто ворует пшеницу,
Которая в темном чулане хранится
В доме,
Который построил Джек!

очередной раз спасибо всем, кто дочитал до сюда. отдельное спасибо Самуилу Яковлевичу, который вдохновил меня на этот пост.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.01.2011, 23:42   #7
crazyman_77
 
Регистрация: 21.01.2011
Сообщений: 8
По умолчанию

IgorGO ,спасибо большое за Ваше внимание и отзывчивость. К сожалению пока для моего восприятия это трудная информация, но я немедленно приступаю к её усваению(или усваиванию ). Спасибо огромное!!!
crazyman_77 вне форума Ответить с цитированием
Старый 22.01.2011, 00:19   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

значит все было не напрасно!

не смотря на кажущуюся минимальность кода, этот пример действительно не очень подходящий для того, чтобы делать первые шаги...
начните с "Hello World!" - стандартная первая программа для любого языка.
понимаете, если разбирая выложенный пример, вдаваться во все нюансы - рассказ может затянутся на 10 страиц, если рассказать коротко, будет вопиюще не точно и останется полно вопросов. Кстати, в детальном рассказе, возможно вопросов не останется, но новых появится в 10 раз больше... какой-то замкнутый круг.

в чем я уверен на 100% - так это в том, что программирование - это ремесло, такое же как гончарство или кузнечное дело, ему может научиться каждый, надо время, желание и не помешает знающий человек, способный в нужный момент направить в нужную сторону.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не обновляются данные в WebBrowser Shouldercannon Работа с сетью в Delphi 6 19.03.2010 19:27
Необходимо связать данные в ячейках Janyska Microsoft Office Excel 4 28.09.2009 16:51
Не обновляются наборы данных 111111 Помощь студентам 5 23.06.2009 23:33
Файлы по http не обновляются salgir JavaScript, Ajax 1 18.10.2008 17:55
Не обновляются связи!!! Bezdar Microsoft Office Excel 0 06.08.2008 15:15