Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Он-лайн график по обновляемой ячейке - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Он-лайн график по обновляемой ячейке (Макросы/Sub)
Он-лайн график по обновляемой ячейке
mra12101 Дата: Воскресенье, 19.11.2017, 10:21 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Добрый день! Опытные форумчане, помогите решить еще один вопрос.
На Листе1 в ячейке А2 в течение дня изменяются данные. Также меняются и Показатели 1 и 2.

Что необходимо сделать?
При изменении данных в ячейке А2 необходимо копировать их на Лист2 с соответствующими значениями Показателей, и построить график по столбцу В.
График должен показывать последние 50 значений.
Пример того, как должно выглядеть в приложении.
Буду вам очень признателен!
Спасибо!
К сообщению приложен файл: 8140744.xls(23Kb)


Сообщение отредактировал mra12101 - Воскресенье, 19.11.2017, 16:54
 
Ответить
СообщениеДобрый день! Опытные форумчане, помогите решить еще один вопрос.
На Листе1 в ячейке А2 в течение дня изменяются данные. Также меняются и Показатели 1 и 2.

Что необходимо сделать?
При изменении данных в ячейке А2 необходимо копировать их на Лист2 с соответствующими значениями Показателей, и построить график по столбцу В.
График должен показывать последние 50 значений.
Пример того, как должно выглядеть в приложении.
Буду вам очень признателен!
Спасибо!

Автор - mra12101
Дата добавления - 19.11.2017 в 10:21
InExSu Дата: Воскресенье, 19.11.2017, 12:11 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 260
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
 
Ответить
СообщениеПривет!
Динамический диапазон с автоподстройкой размеров

Автор - InExSu
Дата добавления - 19.11.2017 в 12:11
mra12101 Дата: Воскресенье, 19.11.2017, 14:27 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Спасибо! Посмотрю.
Но основной вопрос касается этого:

Что необходимо сделать?
При изменении данных в ячейке А2 необходимо копировать их на Лист2 с соответствующими значениями Показателей, и построить график по столбцу В.
 
Ответить
СообщениеСпасибо! Посмотрю.
Но основной вопрос касается этого:

Что необходимо сделать?
При изменении данных в ячейке А2 необходимо копировать их на Лист2 с соответствующими значениями Показателей, и построить график по столбцу В.

Автор - mra12101
Дата добавления - 19.11.2017 в 14:27
Nic70y Дата: Воскресенье, 19.11.2017, 21:11 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4238
Репутация: 922 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    u = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
    Sheets(2).Range("b" & u + 1) = [a2]
    Sheets(2).Range("c" & u + 1) = [c2]
    Sheets(2).Range("d" & u + 1) = [d2]
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u) + 1
    ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B2:B" & u + 1)
    End If
End Sub
[/vba]
добавлено:
[vba]
Код
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u) + 1
[/vba]заменить на[vba]
Код
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u + 1).Row - 1
[/vba]файл не менял
К сообщению приложен файл: 3374339.xls(52Kb)


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)


Сообщение отредактировал Nic70y - Понедельник, 20.11.2017, 11:24
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    u = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
    Sheets(2).Range("b" & u + 1) = [a2]
    Sheets(2).Range("c" & u + 1) = [c2]
    Sheets(2).Range("d" & u + 1) = [d2]
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u) + 1
    ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B2:B" & u + 1)
    End If
End Sub
[/vba]
добавлено:
[vba]
Код
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u) + 1
[/vba]заменить на[vba]
Код
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u + 1).Row - 1
[/vba]файл не менял

Автор - Nic70y
Дата добавления - 19.11.2017 в 21:11
mra12101 Дата: Среда, 22.11.2017, 13:31 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Излишнее цитирование удалено администрацией - это нарушение п.5j Правил форума
Добрый день!
Спасибо большое за макрос!
Но есть проблема. Все работает, когда в ячейке В2 изменяю значение вручную. Но когда ставлю туда формулу (или ссылку на ячейку с формулой), то новые значения уже макрос не видит.
И еще, у меня выскакивает ошибка на недопустимое имя диаграммы (когда макрос поместил в свою книгу). Менял на англ. название - не помогает.
И можно еще добавить возможность, что бы график показывал 50 последних значений, иначе ооочень большой получиться)
И добавьте пожалуйста комменты к строкам макроса, что бы разобраться, что он делает, если не затрудник конечно.
Большое спасибо!
 
Ответить
СообщениеИзлишнее цитирование удалено администрацией - это нарушение п.5j Правил форума
Добрый день!
Спасибо большое за макрос!
Но есть проблема. Все работает, когда в ячейке В2 изменяю значение вручную. Но когда ставлю туда формулу (или ссылку на ячейку с формулой), то новые значения уже макрос не видит.
И еще, у меня выскакивает ошибка на недопустимое имя диаграммы (когда макрос поместил в свою книгу). Менял на англ. название - не помогает.
И можно еще добавить возможность, что бы график показывал 50 последних значений, иначе ооочень большой получиться)
И добавьте пожалуйста комменты к строкам макроса, что бы разобраться, что он делает, если не затрудник конечно.
Большое спасибо!

Автор - mra12101
Дата добавления - 22.11.2017 в 13:31
Nic70y Дата: Среда, 22.11.2017, 17:53 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4238
Репутация: 922 ±
Замечаний: 0% ±

Excel 2013
когда в ячейке В2 изменяю значение вручную
таки да, макрос на это и рассчитан,
можно конечно попробовать прикрутить Калькулят,
но не рекомендую, т.к. может насохранять не то, что нужно
формула же на что-то ссылается - вот и на это повесить макрос
недопустимое имя диаграммы
включите рекордер,
выделите диаграмму,
выключите рекордер,
откройте модуль и увидите имя вашей диаграммы
что бы график показывал 50 последних значений
да, конечно
комменты
держите
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    '                        Range("A2") - ячейка в которой _
    отслеживается изменение
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    'последняя заполненная строка столбца B листа №2 по индексу, _
    в данном случае Лист2
    u = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
    'на листе №2 ячейка столбца B строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке a2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("b" & u + 1) = [a2]
    'на листе №2 ячейка столбца C строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке c2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("c" & u + 1) = [c2]
    'на листе №2 ячейка столбца D строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке d2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("d" & u + 1) = [d2]
    'нумерация строк _
    на листе №2 ячейка столбца A строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается номеру строки этой ячейки -1, _
    т.к. таблица начинается со второй строки
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u + 1).Row - 1
    
    'выбираются данные для диаграммы _
    на листе №2 с B2 по B следующей после последней заполненной строки _
    столбца B листа №2 по индексу
    'ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B2:B" & u + 1)
    
    'ЕСЛИ последняя заполненная строка столбца B листа №2 по индексу < 51, _
            т.е. 50 строк, т.к. таблица начинается со 2 стр. ТОГДА
    's = 2 - первая ячейка таблицы
    'ИНАЧЕ
    'берем последние 50 строк
    'конец ЕСЛИ
    If u < 51 Then
    s = 2
    Else:
    s = u - 48
    End If
    
    ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B" & s & ":B" & u + 1)
    
    End If
End Sub
[/vba]
К сообщению приложен файл: 3374339-2-.xls(60Kb)


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)
 
Ответить
Сообщение
когда в ячейке В2 изменяю значение вручную
таки да, макрос на это и рассчитан,
можно конечно попробовать прикрутить Калькулят,
но не рекомендую, т.к. может насохранять не то, что нужно
формула же на что-то ссылается - вот и на это повесить макрос
недопустимое имя диаграммы
включите рекордер,
выделите диаграмму,
выключите рекордер,
откройте модуль и увидите имя вашей диаграммы
что бы график показывал 50 последних значений
да, конечно
комменты
держите
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    '                        Range("A2") - ячейка в которой _
    отслеживается изменение
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    'последняя заполненная строка столбца B листа №2 по индексу, _
    в данном случае Лист2
    u = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
    'на листе №2 ячейка столбца B строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке a2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("b" & u + 1) = [a2]
    'на листе №2 ячейка столбца C строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке c2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("c" & u + 1) = [c2]
    'на листе №2 ячейка столбца D строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается ячейке d2 текущего листа, _
    в данном случае Лист1
    Sheets(2).Range("d" & u + 1) = [d2]
    'нумерация строк _
    на листе №2 ячейка столбца A строки на 1 больше чем _
    последняя заполненная строка столбца B листа №2 по индексу, _
    т.е слудующая _
    приравнивается номеру строки этой ячейки -1, _
    т.к. таблица начинается со второй строки
    Sheets(2).Range("a" & u + 1) = Sheets(2).Range("a" & u + 1).Row - 1
    
    'выбираются данные для диаграммы _
    на листе №2 с B2 по B следующей после последней заполненной строки _
    столбца B листа №2 по индексу
    'ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B2:B" & u + 1)
    
    'ЕСЛИ последняя заполненная строка столбца B листа №2 по индексу < 51, _
            т.е. 50 строк, т.к. таблица начинается со 2 стр. ТОГДА
    's = 2 - первая ячейка таблицы
    'ИНАЧЕ
    'берем последние 50 строк
    'конец ЕСЛИ
    If u < 51 Then
    s = 2
    Else:
    s = u - 48
    End If
    
    ActiveSheet.ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Sheets(2).Range("B" & s & ":B" & u + 1)
    
    End If
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 22.11.2017 в 17:53
mra12101 Дата: Четверг, 23.11.2017, 10:14 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Nic70y, спасибо Вам огромное!

Что касается ошибки, то в рекордере пишет
[vba]
Код
ActiveSheet.ChartObjects("Диагр. 1")
[/vba],
а после запуска макроса спотыкается об эту строку)). Здесь нужно менять название на
[vba]
Код
ActiveSheet.ChartObjects("Chart 1")
[/vba]
Может пригодиться кому.

Еще раз благодарю за такой подробный макрос.

Если есть у кого идеи как адаптировать макрос так, что бы он видел изменения в ячейке (НЕ ручками), буду очень признателен.
Данные в эксель поступают по DDE в виде текста, а формулами преобразуются уже в понятные для него числа.
Спасибо!
 
Ответить
СообщениеNic70y, спасибо Вам огромное!

Что касается ошибки, то в рекордере пишет
[vba]
Код
ActiveSheet.ChartObjects("Диагр. 1")
[/vba],
а после запуска макроса спотыкается об эту строку)). Здесь нужно менять название на
[vba]
Код
ActiveSheet.ChartObjects("Chart 1")
[/vba]
Может пригодиться кому.

Еще раз благодарю за такой подробный макрос.

Если есть у кого идеи как адаптировать макрос так, что бы он видел изменения в ячейке (НЕ ручками), буду очень признателен.
Данные в эксель поступают по DDE в виде текста, а формулами преобразуются уже в понятные для него числа.
Спасибо!

Автор - mra12101
Дата добавления - 23.11.2017 в 10:14
Nic70y Дата: Четверг, 23.11.2017, 10:56 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4238
Репутация: 922 ±
Замечаний: 0% ±

Excel 2013
Данные в эксель поступают по DDE
но они же поступают в какую-то ячейку (одну из них)[vba]
Код
    If Not Intersect(Target, Range("A2")) Is Nothing Then
[/vba]в этом месте ее и запишите


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)
 
Ответить
Сообщение
Данные в эксель поступают по DDE
но они же поступают в какую-то ячейку (одну из них)[vba]
Код
    If Not Intersect(Target, Range("A2")) Is Nothing Then
[/vba]в этом месте ее и запишите

Автор - Nic70y
Дата добавления - 23.11.2017 в 10:56
mra12101 Дата: Четверг, 23.11.2017, 11:14 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Неа, не реагирует. Ячейка меняется, а новые строки не копирует. Данные поступают по =ДРВ(КодПрог,сервер,элемент1,[элемент2],...)
Как я думаю, нужно сделать сравнение данных входящей ячейки (А2) с последними данными по этой ячейке на Листе2. То есть если текущее значение равно последнему значению, то ничего не делать, если не равно, то создать новую строку с этими данными. Как-то так.
Такое возможно?


Сообщение отредактировал mra12101 - Четверг, 23.11.2017, 11:22
 
Ответить
СообщениеНеа, не реагирует. Ячейка меняется, а новые строки не копирует. Данные поступают по =ДРВ(КодПрог,сервер,элемент1,[элемент2],...)
Как я думаю, нужно сделать сравнение данных входящей ячейки (А2) с последними данными по этой ячейке на Листе2. То есть если текущее значение равно последнему значению, то ничего не делать, если не равно, то создать новую строку с этими данными. Как-то так.
Такое возможно?

Автор - mra12101
Дата добавления - 23.11.2017 в 11:14
Nic70y Дата: Четверг, 23.11.2017, 15:00 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4238
Репутация: 922 ±
Замечаний: 0% ±

Excel 2013
текущее значение равно последнему значению, то ничего не делать
ну если Вы в этом уверены, то
[vba]
Код
Private Sub Worksheet_Calculate()
    If Sheets(2).Range("B2") = "" Then
    uu = ""
    Else:
    uu = Application.VLookup(9E+307, Sheets(2).Range("B:B"), 1, 1)
    End If
    If [a2] <> uu Then
[/vba]
К сообщению приложен файл: 2934711.xls(60Kb)


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)


Сообщение отредактировал Nic70y - Четверг, 23.11.2017, 15:15
 
Ответить
Сообщение
текущее значение равно последнему значению, то ничего не делать
ну если Вы в этом уверены, то
[vba]
Код
Private Sub Worksheet_Calculate()
    If Sheets(2).Range("B2") = "" Then
    uu = ""
    Else:
    uu = Application.VLookup(9E+307, Sheets(2).Range("B:B"), 1, 1)
    End If
    If [a2] <> uu Then
[/vba]

Автор - Nic70y
Дата добавления - 23.11.2017 в 15:00
mra12101 Дата: Четверг, 23.11.2017, 16:27 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2002
Спасибо! То что нужно. Все работает корректно.
Успехов Вам!
 
Ответить
СообщениеСпасибо! То что нужно. Все работает корректно.
Успехов Вам!

Автор - mra12101
Дата добавления - 23.11.2017 в 16:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Он-лайн график по обновляемой ячейке (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!