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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.12.2008, 00:25   #11
Ilya87
Пользователь
 
Регистрация: 14.12.2008
Сообщений: 17
Стрелка

ДА уж! Плохо что я бейсик не очень знаю!
Тогда ещё вопросик, если у меня несколько диаграм, то что именно из этого кода ссылается на определённую диаграмму?

Последний раз редактировалось Ilya87; 18.12.2008 в 00:28.
Ilya87 вне форума
Старый 18.12.2008, 06:14   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Для того, чтобы корректно построить диаграмму, сначала на свободном месте листа формируем строки с данными для построения таким образом, чтобы значения в ячейках каждой строки соответствовали рядам (графикам) диаграммы, и следовали непрерывно. В предыдущем примере всего два графика, причем данные для построения располагались таким образом, что в столбцах с четными номерами строки 2 находились значения 1-го графика, а в столбцах с нечетными номерами строки 3 - значения для 2-го. Такая организация позволила сформировать требуемые строки с данными одним оператором:
Код:
If i Mod 2 = 0 Then Cells(rc - 1, Cells(rc - 1, cc).End(xlToLeft).Column + 1) = .Cells(2, i) _
            Else: Cells(rc, Cells(rc, cc).End(xlToLeft).Column + 1) = .Cells(3, i)
где rc - номер последней строки листа, cc - номер последнего столбца листа. Затем присваиваем переменным x и y (As Range) диапазоны с значениями для 1-го и 2-го графиков соответственно:
Код:
Set x = Range(Cells(rc - 1, "B"), Cells(rc - 1, Cells(rc - 1, cc).End(xlToLeft).Column))
    Set y = Range(Cells(rc, "B"), Cells(rc, Cells(rc, cc).End(xlToLeft).Column))
Теперь строим диаграмму так: задаем первый ряд (т.е. диапазон переменной x), затем добавляем второй (диапазон переменной y). После этого, задаем имена рядов (графиков), указывая адреса соответствующих ячеек, содержащих имя (лист "Данные", ячейки "A2" и "A3"). Все эти действия реализует следующий код:
Код:
With ActiveChart
        .SetSourceData Source:=Sheets("Диаграмма новая").Range(x.Address)
        .SeriesCollection.Add Source:=Sheets("Диаграмма новая").Range(y.Address)
        .SeriesCollection(1).Name = "=Данные!R2C1"
        .SeriesCollection(2).Name = "=Данные!R3C1"
    End With
Аналогично, при большем количестве графиков нужно формировать строки с непрерывными данными для построения каждого графика и, соответственно, добавлять их при построении (.SeriesCollection.Add...).
Если что-то непонятно объяснил - спрашивайте.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 23.12.2008, 20:32   #13
Ilya87
Пользователь
 
Регистрация: 14.12.2008
Сообщений: 17
Стрелка

Что то дельного у меня не вышло!
SAS888, не могли бы вы сделать для двух диаграмм этот макрос на моём примере, а дальше бы уж всяко разобрался?
Вложения
Тип файла: rar Отчёт о работе оборудования(новый проба).rar (585.1 Кб, 36 просмотров)
Ilya87 вне форума
Старый 24.12.2008, 08:44   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Сделано для первых двух диаграмм. Если таких много - организуйте цикл. Будьте внимательны при обращении к ChartObjects по номеру. Можно, предварительно создать массив из номеров нужных ChartObjects и затем в цикле использовать элементы массива.
Вложения
Тип файла: rar Отчёт о работе оборудования(новый проба)_2.rar (460.1 Кб, 32 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 13.01.2009, 10:49   #15
Ilya87
Пользователь
 
Регистрация: 14.12.2008
Сообщений: 17
По умолчанию

А можно ли как нибудь исправить что б, если нет значения, то он бы не "0" ставил а просто его не заносил в диаграмму?
Так то диаграмм много так что думаю попробую цикл сделать. Не подскажеле литературу где можно про это прочитать?
Ilya87 вне форума
Старый 14.01.2009, 05:43   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно. Но я как раз наоборот, при формировании данных для построения вставляю "0" при отсутствующем значении.
Код:
a = IIf(.Cells(4, i) = "", 0, .Cells(4, i))
            b = IIf(.Cells(5, i) = "", 0, .Cells(5, i))
Если этого не нужно, то вместо этих строк всавьте
Код:
a = .Cells(4, i)
            b = .Cells(5, i)
А сделано так для того, чтобы не изменялся масштаб диаграмм по оси категорий. Т.е. если, например, несколько первых значений отсутствуют, то ось категорий автоматически будет начинаться с первого значимого значения (аналогично для последних значений).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QReport. Не могу найти!!! Abbatik Помощь студентам 1 29.05.2008 15:40
МАКРОС!ПОИСК ДАННЫХ. HELP! jungo Microsoft Office Excel 8 02.04.2008 10:50
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34
Не могу найти KlErik Общие вопросы Delphi 4 11.01.2007 11:40