arrays - 如何从数组制作图形?

标签 arrays vba excel graph

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

 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").Range("a1:d29") 而不是
  .Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")

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

最佳答案

您将不得不使用 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

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

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

而且,它违背了用户对图表的期望,你不能用它们来轻松地可视化数据的变化,你不能通过添加新系列或删除工作表上的现有系列等来轻松地修改它们。可能有讨厌这种方法的其他原因......

简而言之,除非您的薪水依赖于此,否则我不建议您这样做。最终,他们要求我们使用 SetSourceData 回到“正常”图表。或 Series.Formula方法。

关于arrays - 如何从数组制作图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811947/

相关文章:

arrays - 如何在Cython中定义列表

c - 在函数中静态标识的数组

excel - 根据 ID 在不同的列范围内检查至少一个相同的值

arrays - Excel VBA(不是 VBScript)101 : How do I create and read a multidimensional array?

Python csv writer 错误的分隔符?

javascript - 如果名称作为变量给出,如何访问多维数组的成员值

java - 如何使用注释验证 Spring MVC 模型中图像的 mime 类型?

excel - 填写网页中的两个输入字段

excel - 创建以单元格值作为名称的文件夹

vba - 尝试从Visual Basic循环搜索