如何从数组制作图表?

Ami*_*mir 1 arrays excel vba graph excel-vba

我想用已知的数组制作一个图表.以下代码正在运行:

 Sub arraychart()
  Dim cht As Object
  Dim hhh As Variant

 Set cht = ActiveSheet.ChartObjects.Add(Left:=300, Width:=300, Top:=10, Height:=300)
 With cht

 .Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")
 .Chart.Type = xlLine
 .Left = 350
 .Width = 400
 .Top = 30
 .Height = 200

 End With
 End Sub
Run Code Online (Sandbox Code Playgroud)

但我想使用数组array1 = Sheets("Data").Range("a1:d29")而不是

  .Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")
Run Code Online (Sandbox Code Playgroud)

我怎么能这样编码?谢谢!

Dav*_*ens 5

您必须使用Series对象的各个组件.该SetSourceData方法需要一个范围,并且不能使用Variant数组.

下面的示例假定A列中的X值(类别标签)和B,C和D列中的三个数据系列.根据需要进行修改.

Sub arraychart()
Dim cht As Object
Dim hhh As Variant
Dim srs as Series
Dim arrayValues as Variant
Dim arrayXValues as Variant
Dim rng as Range
Dim c as Integer

Set cht = ActiveSheet.ChartObjects.Add(Left:=300, Width:=300, Top:=10, Height:=300)

'Define the range you'll use:
Set rng = Range("A1:D29") 'modify as needed

'Define the array of X-Values to use in the chart
arrayXValues = rng.Columns(1).Value

With cht
     .Chart.Type = xlLine
     .Left = 350
     .Width = 400
     .Top = 30
     .Height = 200
     'Create each series in the chart
     For c = 2 to rng.Columns.Count
         'Define the array of values for each series
         arrayValues = rng.Columns(c).Value
         Set srs = .Chart.SeriesCollection.NewSeries
         With srs
             .XValues = arrayXValues
             .Values = arrayValues
             .Name = "whatever you want to name it, etc." 'Modify as needed
         End With
     Next

End With
End Sub
Run Code Online (Sandbox Code Playgroud)

OUTPUT

以下是示例数据的示例图表:

在此输入图像描述

注意我唯一一次这样做是因为一些公司指示我们的图形应用程序应该生成图表,这些图表不容易(或错误地)被用户或消费者修改.所以我们花了很长时间来构建,开发和支持这种方法.

它使"数据"独立于工作表/计算/等.虽然这有一些用途,比如它可以防止用户无意中"破坏"图表,但它也使普通用户有意或无法有意更新或修改图表.

而且,它违背了一切用户期望有关图表,您不能使用它们轻松虚拟化的数据的变化,你不能轻易通过增加新的系列,或在工作表中删除现有系列等修改它们有可能其他理由讨厌这种方法......

简而言之,除非你的薪水取决于它,否则我不建议这样做.最终,他们要求我们使用SetSourceDataSeries.Formula方法回到"正常"图表.