【问题标题】:VBA code which goes through multiple columns and builds charts of them遍历多列并构建它们的图表的 VBA 代码
【发布时间】:2013-06-25 10:22:37
【问题描述】:

对于以下情况,我需要一个示例代码:

  1. 我的工作簿中有多个包含数据列的工作表
  2. 工作表如下所示:

    X1 Y1  X2 Y2  ...
    2  100 2  101
    3  110 3  108
    4  115 5  114
    5  116 6  117
    6  120 7  121
    
  3. 每张表都有相同的数据标题(在本例中为 X1 和 Y1 等)。

  4. 每个工作表仅包含每个数据列标题之一(Y2 找不到两次 来自当前工作表)。

我需要一个 VBA 代码,它通过给定的数据列标题查找所有数据列,并将所有这些数据列的图形绘制到一个散点图上,并用当前工作表名称命名绘制的线。

以下数据将创建一个图表到散点图

   X1 Y1   
   2  100 
   3  110 
   4  115 
   5  116 
   6  120 

这会为同一个散点图创建另一个图表。

     X2 Y2
     2  101
     3  108
     5  114
     6  117
     7  121

所以所有数据图也有单独的 x 轴值。

我的主要问题是我不知道如何制作散点图 使用 VBA。找到我可以开始工作的正确数据列。

答案是否会是某种子例程,将给定范围内的新行添加到给定散点图?


Sub createChart()

Dim headerToFind As String
headerToFind = "Y2" 

Dim i As Integer
Dim j As Integer
Dim ws As Worksheet
i = 1
j = 1

' create and initialize scatterplot chart to given worksheet


For Each ws In Workbooks("data.xlsm").Worksheets

    Do While IsEmpty(ws.Cells(1, i)) = False

        If ws.Cells(1, i) = headerToFind Then

           ' get data from column i. x values can be found from column i-1

        End If

        i = i + 1
    Loop
Next ws

结束子

【问题讨论】:

  • 我用目前的代码更新了我的帖子。我尝试使用宏记录器来获取一些可以使用的代码,但这不起作用。我似乎不明白如何创建一个散点图,我可以稍后通过它的名称来引用它。

标签: excel vba


【解决方案1】:

您的问题非常广泛,但在您的评论中,您更具体地问“如何创建一个散点图,我稍后可以通过它的名称来引用它。”

据我所知,在 Excel 中为图表命名的过程有点尴尬。我发现这样做的唯一方法是通过单击它来激活图表,然后进入 VBA 编辑器的即时窗口,然后输入:

ActiveChart.Parent.Name = "My scatter plot" ' or whatever name

然后,假设您没有删除图表,您可以在代码中引用它,如下所示:

Dim cho As chartObject
Dim cht As Chart
Set cho = Sheet1.ChartObjects("My scatter plot") 
Set cht = cho.Chart

这是假设它位于Sheet1。酌情调整。然后你可以像这样向它添加系列:

Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
With ser
    'example settings:
    .ChartType = xlXYScatter
    .XValues = Range("A2:A6")
    .Values = Range("B2:B6")
    .Name = Range("B1").Value
    .MarkerStyle = xlMarkerStyleNone
    'can also format the line style, color, weight, etc. etc.
End With

有关ChartChartObject 对象的更多详细信息,请查看this earlier answer

【讨论】:

  • 感谢您的回答。我承认我的问题非常广泛。不过,您的答案正是我想要的。这真的拯救了我的一天。 :)
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 2023-03-23
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多