【问题标题】:Scatter Plot in Excel using VBA使用 VBA 在 Excel 中绘制散点图
【发布时间】:2014-07-18 14:26:06
【问题描述】:

我有一列包含我的 x 数据和两列包含我的 y 数据。我想将 y 与 x 作图,但每列的长度取决于计数器变量 i。我没有使用 vba 的经验,但会使用编码。有人可以概述执行此任务的正确语法吗?

请,谢谢!

【问题讨论】:

  • 我认为您不需要 VBA 来执行此操作。只需使散点图 X 和 Y 的范围比您预期的数据更长。它应该忽略空行。
  • @RickTeachey。 Excel 在这种情况下忽略空行即使您告诉 excel 忽略它们。 (因为空行总是在列的末尾)
  • 使用内置的Table功能,会自动增加数据范围。
  • @guitarthrower Table 功能的一大缺点是它破坏了与外部数据源的链接。这通常不是可接受的权衡。
  • @Rick Teachey:在 OP 的情况下,这可能不是一个权衡。由于 OP 没有提供任何信息,因此我提供了该选项。无论如何,根据我的经验,根据您的数据源,Excel 为您提供了将外部数据源作为Table 添加到文件中的选项。因此,即使现有数据可能不是该格式,也可以根据需要重新连接该格式的数据源。

标签: excel vba scatter-plot


【解决方案1】:

您可以转到“开发者”标签,然后录制宏。在记录模式下,使用您想要的数据和规范创建图表。

结束宏的录制,然后您将拥有一个 VBA 代码模板 (ALT+F11) 作为基础使用。

【讨论】:

    【解决方案2】:

    听起来最好的解决方案是简单地使 X-Y 散点图范围比您预期的数据更长(Excel 将忽略空白行)。

    但是,如果您想变得花哨,可以使用动态命名范围填充散点图数据,这些范围会自动调整到数据的长度,而无需使用 VBA:

    1. 创建一个代表 X 数据列的动态命名范围(AKA 命名公式)。

      示例(假设列A,数据从A1开始):

      =$A$1:INDEX($A$1:$A$1000,MATCH(TRUE,ISBLANK(Sheet1!$A$1:$A$1000),0)-1)
      

      更改$A$1,使其与数据的第一行相对应。将$A$1000 更改为比您预期的数据更长的行号。

      将上面的命名公式称为“XColumn”或类似名称。要创建一个命名范围,请执行Formulas->Define Name

    2. 将散点图的 X 范围设置为:

      =Sheet1!XColumn
      

      请注意,如果您尝试在没有工作表名称的情况下输入命名范围,即使命名范围的范围是整个工作簿,Excel 的绘图窗口也会出错(没有任何有关如何解决问题的有用信息!) ,即使它在同一个工作表上! -- 很烦,对吧?

    3. 对每个列和散点图范围(Y1 = Y1Column、Y2 = Y2Column 等)执行此操作。

    请注意,如果您的列数据包含文本、空白、错误等,这将无法正常工作,但可以修改该方法以处理这些问题。

    要测试并确保您的动态命名范围按预期创建,您可以在任何单元格中输入:

    =SUMPRODUCT(XColumn)
    

    然后执行Formulas-->Evaluate Formula-->Evaluate 以确保XColumn 数组包含您希望它包含的数据。


    可选提示:创建另一个名为 FirstColumn 的命名范围,设置为第一列的位置,例如$A:$A。将 另一个 命名范围命名为 FirstRow 并将其设置为第一行的位置,例如$1:$1。制作 另一个 名为 MaxRow 的命名范围,并将其设置为您期望数据的最大长度,例如$1000:$1000。最后:

    • 将以上$A$1的所有实例替换为:

      INDEX(FirstRow,0,COLUMN(FirstColumn)+<DATA TABLE COLUMN NUMBER - 1>)

    • $A$1000 的所有实例替换为:

      INDEX(MaxRow,0,COLUMN(FirstColumn)+<DATA TABLE COLUMN NUMBER - 1>)

    <DATA TABLE COLUMN NUMBER - 1> 对于每个命名公式都会有所不同(例如,0 用于 XColumn1 用于 Y1Column2 用于 Y2Column,等等)。

    现在,如果您想在不同的位置创建新的数据表和散点图,您可以复制并粘贴您的命名范围,而无需重新进行所有工作,您只需更改一两个东西而不是 15!此外,如果数据变得比您预期的要长,您只需更改一件事而不是三件事。

    【讨论】:

    • 只要使用 Excel 内置的Table 功能,范围也会自动增加。
    • 使用 Excel 的Table 功能的一个大问题是它会破坏与外部数据的链接。有时Table 并不是正确的工具。
    • 我同意它有时不是正确的工具。但话又说回来,你的可能也不是。我只是提供一个不同的(可能不太复杂)选项,而不是贬低你的答案,因为我已经多次使用你的解决方案。
    【解决方案3】:

    Excel 的内置Table 功能是在添加新数据时自动增加范围大小的好方法。只需选择您的数据,然后按Ctrl + t 或转到Insert > Table。然后,当您从 Chart 引用新的 Table 时,它会随着您的数据而增加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2018-06-23
      相关资源
      最近更新 更多