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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2015, 09:58   #1
hemmel
Пользователь
 
Регистрация: 14.01.2015
Сообщений: 20
По умолчанию Много динамических диаграмм в одном файле

Есть около 50 таблиц.
В каждой таблице фиксированное число строк. Количество столбцов меняется, оно растет.

Нужно построить к каждой таблице диаграмму.
Пытался сделать через динамический массив для каждого ряда. Но тогда получается очень большое количество именных формул, около 70 в моем случае.

Пример во вложении.

Последний раз редактировалось hemmel; 21.05.2015 в 15:55.
hemmel вне форума Ответить с цитированием
Старый 21.05.2015, 11:49   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

А какого рода диаграммы? Построили бы хоть одну в примере. Можно макросом сделать.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.05.2015, 12:02   #3
hemmel
Пользователь
 
Регистрация: 14.01.2015
Сообщений: 20
По умолчанию

Тип диаграммы Линейная
а как сделать это на макросе?
Изображения
Тип файла: jpg Снимок.JPG (28.3 Кб, 86 просмотров)

Последний раз редактировалось hemmel; 21.05.2015 в 12:25.
hemmel вне форума Ответить с цитированием
Старый 21.05.2015, 13:08   #4
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Не силен в диаграммах, но вроде это график, а не линейная диаграмма, но не суть...

Запишите через макрорекодер вставку нужной Вам диаграммы, получится что-то вроде
Код:
Sub Макрос1()

    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("B2:G14")
End Sub
Далее т.к. у Вас строки всегда одни и те же, сделать переменную величину G14 - вместо 14 поставить номер последнего столбца, здесь можно тоже по-разному сделать

А вообще выложили бы файл того, что хотите сделать - можно было бы посоветовать что-то конкретное или даже сделать
27102014 вне форума Ответить с цитированием
Старый 21.05.2015, 14:03   #5
hemmel
Пользователь
 
Регистрация: 14.01.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от 27102014 Посмотреть сообщение
Не силен в диаграммах, но вроде это график, а не линейная диаграмма, но не суть...

Запишите через макрорекодер вставку нужной Вам диаграммы, получится что-то вроде
Код:
Sub Макрос1()

    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("B2:G14")
End Sub
Далее т.к. у Вас строки всегда одни и те же, сделать переменную величину G14 - вместо 14 поставить номер последнего столбца, здесь можно тоже по-разному сделать

А вообще выложили бы файл того, что хотите сделать - можно было бы посоветовать что-то конкретное или даже сделать
Количества строк в таблицах неизменны, а вот столбцы будут расти по мере заполнения таблицы. Поэтому нужно чтобы макрос или формула находила последний столбец данных для диаграммы.
hemmel вне форума Ответить с цитированием
Старый 21.05.2015, 14:23   #6
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Я же Вам об этом и написал

Можно так попробовать
Код:
Sub Макрос1()
'номер последнего столбца
Last = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1

    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("B2:G"& Last)
End Sub
Все зависит от количества заполненных строк, нужно сделать цикл перебора всех таблиц, к которым нужно рисовать диаграммы

Также нужно предусмотреть добавление данных в таблицу - будут ли при этом удаляться уже имеющиеся диаграммы или будет происходить обновление данных?
Файл от Вас будет?
27102014 вне форума Ответить с цитированием
Старый 21.05.2015, 14:24   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение

Код:
Sub AddCharts()
  Dim rg As Range, c As Long, a
  Set rg = Cells(1, 1)
  Do While Not IsEmpty(rg.End(xlDown))
    Set rg = rg.End(xlDown)
    With Me.Shapes.AddChart
      a = rg.Offset(-1, 0).Resize(1, 99).Value: Rows(rg.Row - 1).ClearContents
      c = rg.CurrentRegion.Columns.Count - 1: rg.Offset(-1, 0).Resize(1, 99).Value = a
      .Chart.SetSourceData Source:=rg.Offset(0, 1).Resize(12, c): .Chart.ChartType = xlLineStacked
      .Left = Columns(3).Left:  .Width = Columns(10).Left - Columns(3).Left
      .Top = rg.Offset(13, 0).Top: .Height = rg.Offset(19, 0).Top - rg.Offset(13, 0).Top
      Set rg = rg.End(xlDown)
    End With
  Loop
End Sub
Вложения
Тип файла: rar множество динамических диаграмм.rar (23.3 Кб, 12 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.05.2015, 14:58   #8
hemmel
Пользователь
 
Регистрация: 14.01.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
см.вложение

Код:
Sub AddCharts()
  Dim rg As Range, c As Long, a
  Set rg = Cells(1, 1)
  Do While Not IsEmpty(rg.End(xlDown))
    Set rg = rg.End(xlDown)
    With Me.Shapes.AddChart
      a = rg.Offset(-1, 0).Resize(1, 99).Value: Rows(rg.Row - 1).ClearContents
      c = rg.CurrentRegion.Columns.Count - 1: rg.Offset(-1, 0).Resize(1, 99).Value = a
      .Chart.SetSourceData Source:=rg.Offset(0, 1).Resize(12, c): .Chart.ChartType = xlLineStacked
      .Left = Columns(3).Left:  .Width = Columns(10).Left - Columns(3).Left
      .Top = rg.Offset(13, 0).Top: .Height = rg.Offset(19, 0).Top - rg.Offset(13, 0).Top
      Set rg = rg.End(xlDown)
    End With
  Loop
End Sub
Супер! Помоему это как раз то что мне нужно!
Вопрос, а как транспонировать диаграмму?
у меня данные в рядах, а графики строятся по столбцам.
Я транспонировал вручную через кнопку, но при повторной постстройке диаграмм они снова переворачиваются.

Последний раз редактировалось hemmel; 21.05.2015 в 15:17.
hemmel вне форума Ответить с цитированием
Старый 21.05.2015, 16:47   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Вложения
Тип файла: rar множество динамических диаграмм.rar (27.6 Кб, 5 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.05.2015, 19:47   #10
hemmel
Пользователь
 
Регистрация: 14.01.2015
Сообщений: 20
По умолчанию

IgorGO При нажатии на кнопку Make Chart диаграммы строятся поверх предыдущих диаграмм и старые не удаляются. Можно сделать что-то типо кнопки Обновить чтобы диаграммы обновлялись но не создавались новые?
hemmel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ГЛ много текстур на одном квадрате (мультитекстурирование) ? intmain Gamedev - cоздание игр: Unity, OpenGL, DirectX 43 28.04.2013 23:15
одновременное выполнение разных процедур в одном файле? gramp Microsoft Office Excel 15 25.03.2011 12:15
Сохранить картинку и текст в одном файле 856100 Общие вопросы Delphi 15 31.08.2009 13:48
Хранение БД в одном файле D_E_N БД в Delphi 3 18.07.2009 14:01
JPG и TXT в одном файле prizrak1390 Общие вопросы Delphi 9 19.04.2009 18:45