Добрый день многоуважаемые форумчане.... Прошу Вас помочь решить задачу. Интернет в помощь не дал результативности в решении, возможно не так излагал условие, но два дня сижу смотрю материал но все ни то. УСЛОВИЯ такие: 1. ЕСЛИ в ячейке (сейчас G6 выделена желтым цветом) будет указано В15 то график строится на основании данных с листа (в будущем с листов В25; В30;В22,5 и т.д) как и этот график 2. ЕСЛИ в ячейке (сейчас I6 выделена желтым цветом) будет указано 1 квартал (в будущем будет 2-й; 3-й; 4-й) то график строится на основании данных с листа (в будущем с листов В25; В30;В22,5 и т.д) как и этот график 3. Не знаю возможно ли такое но все же спросить Вас, должен. ЕСЛИ я укажу не квартал а с какой именно даты взять значения (даты; Ri (Мпа)) но за три месяца (типо квартал)
ВО ВЛОЖЕНИИ ФАЙЛ. Мне так кажется что подобное скорее всего без макроса не решить СПАСИБО ВАМ ВСЕМ ОГРОМНОЕ ЗА ОТВЕТЫ И ПОМОЩЬ
Добрый день многоуважаемые форумчане.... Прошу Вас помочь решить задачу. Интернет в помощь не дал результативности в решении, возможно не так излагал условие, но два дня сижу смотрю материал но все ни то. УСЛОВИЯ такие: 1. ЕСЛИ в ячейке (сейчас G6 выделена желтым цветом) будет указано В15 то график строится на основании данных с листа (в будущем с листов В25; В30;В22,5 и т.д) как и этот график 2. ЕСЛИ в ячейке (сейчас I6 выделена желтым цветом) будет указано 1 квартал (в будущем будет 2-й; 3-й; 4-й) то график строится на основании данных с листа (в будущем с листов В25; В30;В22,5 и т.д) как и этот график 3. Не знаю возможно ли такое но все же спросить Вас, должен. ЕСЛИ я укажу не квартал а с какой именно даты взять значения (даты; Ri (Мпа)) но за три месяца (типо квартал)
ВО ВЛОЖЕНИИ ФАЙЛ. Мне так кажется что подобное скорее всего без макроса не решить СПАСИБО ВАМ ВСЕМ ОГРОМНОЕ ЗА ОТВЕТЫ И ПОМОЩЬlebensvoll
Вы встали на немого кривой путь но если без разных листов не обойтись, то Диаграмма всегда строится с данными из промежуточного диапазона, а вот в этот диапазон данные попадают с нужных вам листов посредством функции доверительная ссылка
Код
=INDIRECT()
Можно поиграть с именами переменных и формулами определяющих (опять через туже функцию) области для графика, но стоит оно того?
Вы встали на немого кривой путь но если без разных листов не обойтись, то Диаграмма всегда строится с данными из промежуточного диапазона, а вот в этот диапазон данные попадают с нужных вам листов посредством функции доверительная ссылка
Код
=INDIRECT()
Можно поиграть с именами переменных и формулами определяющих (опять через туже функцию) области для графика, но стоит оно того?bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Пятница, 16.02.2018, 14:24
bmv98rus, спасибо за ответ... Попробую тогда предложенное вами в создании промежуточного диапазона :'( раз так не представляется возможным. Просто файл и так уже подтормаживает (((( с таким объемом (967 КБ и предложенная вами функция задействована в нем, но для других промежуточных данных в расчете) да с таким же промежуточным решением (((( Осталось лишь завершить проблему с графиком
bmv98rus, спасибо за ответ... Попробую тогда предложенное вами в создании промежуточного диапазона :'( раз так не представляется возможным. Просто файл и так уже подтормаживает (((( с таким объемом (967 КБ и предложенная вами функция задействована в нем, но для других промежуточных данных в расчете) да с таким же промежуточным решением (((( Осталось лишь завершить проблему с графикомlebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Пятница, 16.02.2018, 14:26
Добрый день. Макросом по листам прыгать не сложно. а вот с датами не совсем понял... Вы пишите 1 квартал, а данные с мая по август включительно (не равно 1(первый?) квартал и не равно 3 месяца) в модуль листа с диаграммой [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$G$6" Then Exit Sub On Error Resume Next Set sh = Worksheets(Target.Value) If Err Then Err.Clear Exit Sub End If With ChartObjects(1).Chart.SeriesCollection(3) .Values = Worksheets(Target.Value).Range("C2:C13") .XValues = Worksheets(Target.Value).Range("B2:B13") End With End Sub
[/vba]
Добрый день. Макросом по листам прыгать не сложно. а вот с датами не совсем понял... Вы пишите 1 квартал, а данные с мая по август включительно (не равно 1(первый?) квартал и не равно 3 месяца) в модуль листа с диаграммой [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$G$6" Then Exit Sub On Error Resume Next Set sh = Worksheets(Target.Value) If Err Then Err.Clear Exit Sub End If With ChartObjects(1).Chart.SeriesCollection(3) .Values = Worksheets(Target.Value).Range("C2:C13") .XValues = Worksheets(Target.Value).Range("B2:B13") End With End Sub
Адимин прошу Вас помочь как правильно поступить... Данную тему создал в "Вопросы по эксель" думал решить задачу с помощью функций. Вроде бы решилась предложенным от bmv98rus, но проблематично применить к своей задумке. Если вы считаете что тему нужно пересоздать для темы "Вопросы по VBA" то я пересоздам
sboy, это ведь пример в планах будут значения 1 квартала и начинаться как и должно быть с "Января" но не факт что с первого января (((( А вот изменение диаграмы согласно классу бетона В15 (со значениями листа В15) все супер, Спасибо... sboy, а можно тогда с датами поступить так: в ячейке I6 будет указана дата пусть примерно 25.05.2017 тогда код находит в столбце B:B данную дату и захватывает диапазон дат от 25.05.2017 до какого то там (главное что за три месяца). Соответственно Ri(МПа) также берутся согласно этих дат!?
sboy, СПАСИБО ВАМ ЗА ОТВЕТ!!!
Цитата
Адимин прошу Вас помочь как правильно поступить... Данную тему создал в "Вопросы по эксель" думал решить задачу с помощью функций. Вроде бы решилась предложенным от bmv98rus, но проблематично применить к своей задумке. Если вы считаете что тему нужно пересоздать для темы "Вопросы по VBA" то я пересоздам
sboy, это ведь пример в планах будут значения 1 квартала и начинаться как и должно быть с "Января" но не факт что с первого января (((( А вот изменение диаграмы согласно классу бетона В15 (со значениями листа В15) все супер, Спасибо... sboy, а можно тогда с датами поступить так: в ячейке I6 будет указана дата пусть примерно 25.05.2017 тогда код находит в столбце B:B данную дату и захватывает диапазон дат от 25.05.2017 до какого то там (главное что за три месяца). Соответственно Ri(МПа) также берутся согласно этих дат!?lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Пятница, 16.02.2018, 17:10
Добрый день. с датами примерно так можно сделать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G6", "I6")) Is Nothing Then On Error Resume Next Set sh = Worksheets([G6].Value) If Err Then Err.Clear Exit Sub End If On Error GoTo 0 With Application x1 = .IfError(.Match([I6], sh.Range("B2:B33"), 0), .Match([I6], sh.Range("B2:B33"))) + 1 x2 = .Match(CDbl([I6] + 91), sh.Range("B2:B33")) + 1 End With Set rX = Range(sh.Cells(x1, 2), sh.Cells(x2, 2)) With ChartObjects(1).Chart .SeriesCollection(3).Values = rX.Offset(0, 1) .SeriesCollection(3).XValues = rX .SeriesCollection(1).XValues = rX End With End If End Sub
[/vba]
Добрый день. с датами примерно так можно сделать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G6", "I6")) Is Nothing Then On Error Resume Next Set sh = Worksheets([G6].Value) If Err Then Err.Clear Exit Sub End If On Error GoTo 0 With Application x1 = .IfError(.Match([I6], sh.Range("B2:B33"), 0), .Match([I6], sh.Range("B2:B33"))) + 1 x2 = .Match(CDbl([I6] + 91), sh.Range("B2:B33")) + 1 End With Set rX = Range(sh.Cells(x1, 2), sh.Cells(x2, 2)) With ChartObjects(1).Chart .SeriesCollection(3).Values = rX.Offset(0, 1) .SeriesCollection(3).XValues = rX .SeriesCollection(1).XValues = rX End With End If End Sub
sboy, ВЫ ПРОСТО ГЕНИЙ!!! НО все же столкнулся с проблемой. Во вложении файл. Суть в том что думал смогу пременить ваше решение к своему файлу, но УВЫ (((( ОШИБКИ. Потому как диаграмму переношу на другой лист. Решил сделать аналог своего файла на вашем решении моей проблемы (((( Кто сможет помочь, прошу Вас подсобите.. Задача: Имеется файл с листами (В7,5; В10;В15;В20;.........В45) на них собирается информация по прочности бетона. Далее идут еще три листа с промежуточными расчетами для обработки информации. Конечный Лист "ОТЧЕТ" где будет строиться график при выборе 1. класса бетона (согласно листу: В7,5; В10;В15;В20;.........В45) 2. а также указанная дата для построения графика значения Ri (Мпа). от начальной даты нужно построить график за период трех месяцев)
Предложенный вариант решения от bmv98rus, с промежуточными данными не предоставляется возможным потому как файл и так уже много весит и подтормаживает. Решение от Сергея sboy, самое самое но есть мои оплошности
Заранее всем спасибо за помощь
sboy, ВЫ ПРОСТО ГЕНИЙ!!! НО все же столкнулся с проблемой. Во вложении файл. Суть в том что думал смогу пременить ваше решение к своему файлу, но УВЫ (((( ОШИБКИ. Потому как диаграмму переношу на другой лист. Решил сделать аналог своего файла на вашем решении моей проблемы (((( Кто сможет помочь, прошу Вас подсобите.. Задача: Имеется файл с листами (В7,5; В10;В15;В20;.........В45) на них собирается информация по прочности бетона. Далее идут еще три листа с промежуточными расчетами для обработки информации. Конечный Лист "ОТЧЕТ" где будет строиться график при выборе 1. класса бетона (согласно листу: В7,5; В10;В15;В20;.........В45) 2. а также указанная дата для построения графика значения Ri (Мпа). от начальной даты нужно построить график за период трех месяцев)
Предложенный вариант решения от bmv98rus, с промежуточными данными не предоставляется возможным потому как файл и так уже много весит и подтормаживает. Решение от Сергея sboy, самое самое но есть мои оплошности
Вы сделали все правильно. одно место я поправил, а так ошибка выскакивала из-за даты до первой в диапазоне. Поправил, теперь если дата введенная раньше чем первая в диапазоне, берем первую. Но, первая дата из диапазона должны быть <= введенная +91 день. Иначе вылет с ошибкой.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C3", "E3")) Is Nothing Then On Error Resume Next Set sh = Worksheets([C3].Value) If Err Then Err.Clear Exit Sub End If On Error GoTo 0 With Application x1 = .IfError(.IfError(.Match([E3], sh.Range("B2:B250"), 0), .Match([E3], sh.Range("B2:B250"))), 1) + 1 x2 = .Match(CDbl([E3] + 91), sh.Range("B2:B250")) + 1 End With Set rX = sh.Range(sh.Cells(x1, 2), sh.Cells(x2, 2)) With ChartObjects(1).Chart .SeriesCollection(3).Values = rX.Offset(0, 1) .SeriesCollection(3).XValues = rX .SeriesCollection(1).XValues = rX End With End If End Sub
[/vba]
Вы сделали все правильно. одно место я поправил, а так ошибка выскакивала из-за даты до первой в диапазоне. Поправил, теперь если дата введенная раньше чем первая в диапазоне, берем первую. Но, первая дата из диапазона должны быть <= введенная +91 день. Иначе вылет с ошибкой.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C3", "E3")) Is Nothing Then On Error Resume Next Set sh = Worksheets([C3].Value) If Err Then Err.Clear Exit Sub End If On Error GoTo 0 With Application x1 = .IfError(.IfError(.Match([E3], sh.Range("B2:B250"), 0), .Match([E3], sh.Range("B2:B250"))), 1) + 1 x2 = .Match(CDbl([E3] + 91), sh.Range("B2:B250")) + 1 End With Set rX = sh.Range(sh.Cells(x1, 2), sh.Cells(x2, 2)) With ChartObjects(1).Chart .SeriesCollection(3).Values = rX.Offset(0, 1) .SeriesCollection(3).XValues = rX .SeriesCollection(1).XValues = rX End With End If End Sub