Создать диаграмму из данных массива, а не диапазона

Можно ли создать диаграмму (например, диаграмму с двойной осью Y) не из диапазонов, а из данных массива? Если так, то как?

 assylias14 мая 2012 г., 10:05
@ Jean-Fran & oisCorbett Согласен - я должен был пометить как связанный, а не как дубликат.
 assylias13 мая 2012 г., 09:57
 assylias14 мая 2012 г., 10:06
@brettdj Согласен - я должен был пометить как связанный, а не как дубликат.
 Jean-François Corbett13 мая 2012 г., 16:43
@assylias: Это не очевидный дубликат ... Язык C #, а не VBA. Концепции практически одинаковы, но разработанный пример не будет выглядеть одинаково.
 brettdj14 мая 2012 г., 02:13
@assylias Plus. На другой вопрос я не смотрел как на фактический ответ.

Ответы на вопрос(2)

XValues а такжеValues свойстваSeries объект на графике. Пример:

Dim c As Chart
Dim s As Series
Dim myData As Variant

Set c = ActiveChart ' Assumes a chart is currently active in Excel...
Set s = c.SeriesCollection(1)

myData = Array(9, 6, 7, 1) ' or whatever
s.Values = myData
 13 мая 2012 г., 22:46
Это ограничение на размер данных, которые вы можете сделать следующим образом. Я не могу вспомнить, что это такое, но оно маленькое.
 18 июн. 2014 г., 14:28
@lori_m Я настраиваюList<double> whatever.toArray() заseries.Values и работает Excel 2007, но он отображает только 256 точек. Зачем? 16k было бы достаточно (практические причины), поэтому мне не нужно взламывать неограниченное количество с использованием массивов nx1
 14 мая 2012 г., 08:31
@ ja72: Определить «маленький»? ... Я только что протестировал его с 16 000 баллов.
 15 мая 2012 г., 11:08
@ ja72, вероятно, относится к Excel 2003 и более ранним версиям, где было ограничение по длине. Размер сетки также ограничивает размер 1d-массивов 256 или 16384 точками в Excel 2003/2007 соответственно. Чтобы преодолеть это, вы можете определить данные как вертикальный массив с помощьюapplication.transpose(mydata) (или объявление массива nx1 как в другом ответе)
 15 мая 2012 г., 05:27
Потрясающие. Я стою исправлено.

здних версиях, но в предыдущих версиях я считаю, что для каждой серии есть ограничение в 255 символов. Метод, который я использовал для обхода этого ограничения, показан в следующем примере случайного блуждания:

Sub ChartArray()

Dim x(0 To 1000, 0 To 0) As Double
Dim y(0 To 1000, 0 To 0) As Double
x(0, 0) = 0
y(0, 0) = 0
For i = 1 To 1000
    x(i, 0) = i
    y(i, 0) = y(i - 1, 0) + WorksheetFunction.NormSInv(Rnd())
Next i

Charts.Add
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
With ActiveChart.SeriesCollection
    If .Count = 0 Then .NewSeries
    If Val(Application.Version) >= 12 Then
        .Item(1).Values = y
        .Item(1).XValues = x
    Else
        .Item(1).Select
        Names.Add "_", x
        ExecuteExcel4Macro "series.x(!_)"
        Names.Add "_", y
        ExecuteExcel4Macro "series.y(,!_)"
        Names("_").Delete
    End If
End With
ActiveChart.ChartArea.Select

End Sub

Альтернативный метод - присвоить имена массивам (аналогично описанному выше обходному решению), а затем настроить ряды для обращения к назначенным именам. Это работает нормально во всех версиях, если вы сохраняете в формате xls, но при сохранении в новых форматах xlsx / xlsm / xlsb, по-видимому, существует ограничение длины для именованных массивов из 8192 символов.

 15 мая 2012 г., 12:04
Я бы не сказал «ужасно» - может быть, изобилует :) Но я не уверен, что есть другой способ, все веб-ресурсы, которые я мог найти, сказали, что это было невозможно в более старых версиях.
 15 мая 2012 г., 11:12
Хорошо спасибо. +1 за интересный / ужасный подход!
 15 мая 2012 г., 10:55
Нет, старые команды Excel 4 не работают с диаграммами в более поздних версиях, что раздражает.
 15 мая 2012 г., 08:33
Из любопытства, делаетExecuteExcel4Macro трюк не работает в 2007 году и позже? Он испытал это в Excel 2007, и диаграмма не содержит данных.

Ваш ответ на вопрос