如何从数组制作图表?

时间:2014-09-12 15:38:23

标签: arrays vba excel-vba graph excel

我想使用已知数组制作图表。以下代码正在运行:

 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

但我想使用数组array1 = Sheets(" Data")。范​​围(" a1:d29")代替

  .Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")

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

1 个答案:

答案 0 :(得分: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

<强>输出

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

enter image description here

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

它使&#34;数据&#34;独立于表/计算/等。虽然这有一些用途,但它可以防止用户无意中打破&#34;图表,它也使普通用户很难或不可能有意或无意地更新或修改图表。

并且,它违背了用户对图表的所有期望,您无法使用它们轻松地查看数据中的更改,您无法通过添加新系列或删除现有系列来轻松修改它们工作表等可能还有其他理由讨厌这种方法......

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