Страницы: 1
RSS
Продление диаграмм
 
Здравствуйте!  
у меня следующая проблема: есть около 100 готовых диаграмм.Нужно их продлить, добавив 2011 год. В приложенном файле пример(в оригинале листов много, но данные расположены так же)  
хорошо, если будет макрос(я не знаю, как сдвинуть диапазон с данными для диаграммы)  
 
Спасибо заранее за любую помощь
 
{quote}{login=Елена20000000}{date=07.04.2010 01:09}{thema=Продление диаграмм}{post}есть около 100 готовых диаграмм...{/post}{/quote}  
Зачем столько? Все равно все нельзя посмотреть сразу. Excel позволяет построить один (или несколько) графиков  - как шаблоны. И уже для этих готовых шаблонов менять исходные данные. В таком варианте файл не будет загружен лишним весом.
 
Файл большой, это да..  
диаграммы, конечно, смотрят при необходимости, но обновить надо все.  
 
Я хотела макросом, но прочитала только как установить диапазон данных для диаграммы, а как извлечь диапазон готовой диаграммы непонятно.
 
Я писал о возможности замены мнжества диаграмм несколькими (или даже одной).  
По Вашему вопросу - нужно было сразу предусмотреть расширения диапазана (динамический диапазон, динамический график). А так как есть, если с макросом не помогут - только ручками :(  
И подумайте над моим предложением - файл легче  и работать удобнее :)
 
Cпасибо за участие, будeм ждать ответов от знатоков VBA.
 
Да, если вручную, то долго, однако).  
Чтобы не лезть каждый раз в выбор источника данных, как вариант:  
- выделяем диаграмму - выделяется диапазон исходных данных - а потом просто мышкой надо перетащить его до нужного предела. Может поможет).
 
Sub pp()  
Dim sh As ChartObject  
Set sh = ActiveSheet.ChartObjects("Äèàãðàììà 1")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i41:i43")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i40]
Set sh = ActiveSheet.ChartObjects("Äèàãðàììà 2")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i83:i85")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i82]
Set sh = ActiveSheet.ChartObjects("Äèàãðàììà 3")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i55:i57")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i54]
End Sub  
 
 
как то так для Вашего листа.  
 
В цикл по листам вставить сами сможете?)
 
Sub pp()  
Dim sh As ChartObject  
Set sh = ActiveSheet.ChartObjects("Диаграмма 1")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i41:i43")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i40]
Set sh = ActiveSheet.ChartObjects("Диаграмма 2")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i83:i85")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i82]
Set sh = ActiveSheet.ChartObjects("Диаграмма 3")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i55:i57")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i54]
End Sub
 
Спасибо большое! хотя на самом деле на каждом листе 12 диаграмм, то есть придется прописать это 12 раз....  
 
Set sh = ActiveSheet.ChartObjects("Диаграмма 1")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i41:i43")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i40]
 
 
попробую щас вставить в цикл
 
я к сожалению сам не умею извлекать ссылки на значения из диаграмм)  
 
может кто добрый с 2003 запишет этот процесс на макродекодер?)
 
{quote}{login=Елена20000000}{date=07.04.2010 02:55}{thema=}{post}Спасибо большое! хотя на самом деле на каждом листе 12 диаграмм, то есть придется прописать это 12 раз....  
 
Set sh = ActiveSheet.ChartObjects("Диаграмма 1")  
sh.Chart.SeriesCollection.NewSeries  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Values = Range("i41:i43")  
sh.Chart.SeriesCollection(sh.Chart.SeriesCollection.Count).Name = [i40]
 
 
попробую щас вставить в цикл{/post}{/quote}  
А на будущее стройте Ваши сотни диаграмм на основании динамических диапазонов тогда и морочится не придется добавили данные и все...
 
а лучше одну на VBA)  
 
выбрали что и за какой период надо построить, ткнули кнопочку - все и построилось) очень мило и красиво
 
Могу предложить такой способ:  
Sub test()  
   For Each c In ActiveSheet.ChartObjects  
       c.Activate  
       With ActiveChart  
           f = .SeriesCollection(1).Formula  
           .SeriesCollection.NewSeries  
           .SeriesCollection(.SeriesCollection.Count).Formula = Replace(Replace(f, "C", "I"), ",1)", "," & .SeriesCollection.Count & ")")  
       End With  
   Next c  
End Sub
 
Такой вариант намного изящнее!  
Понять его, конечно, сложнее)))
 
{quote}{login=Елена20000000}{date=07.04.2010 03:38}{thema=}{post}Такой вариант намного изящнее!  
Понять его, конечно, сложнее))){/post}{/quote}  
 
Берем формулу первого графика на каждой диаграмме (переменная f, выглядет так:  
=SERIES(Лист1!$C$40,Лист1!$B$41:$B$52,Лист1!$C$41:$C$52,1)  );  
Создаем новый график, меняем в этой формуле столбцы C на I, последний аргумент у SERIES (порядковый номер графика на диаграмме) заменяем с 1 на номер, равный количеству графиков. Прсваеваем созданному графику измененную формулу
 
Спасибо огромное, я же разобралась    
здорово когда есть умные люди, которые еще и объясняют)))
Страницы: 1
Читают тему
Наверх