【问题标题】:Excel VBA macro for extracting column numbers from plots用于从图中提取列号的 Excel VBA 宏
【发布时间】:2018-03-26 12:16:53
【问题描述】:

我经常在一个工作表中制作大量散点图(第 j 列与第 i 列)。我想将它们导出为 png/jpg 文件。每个情节都需要一个合理的文件名。我认为文件名可能类似于 plot_[column i]_[column j].png。

如何从每个绘图(或 ActiveChart)中获取列(如 C 或 AE)?然后我可以创建一个文件名字符串以输入到 Export 方法中。我是 VBA 宏的完全初学者,但了解一些 Visual Basic。

【问题讨论】:

  • 更改列时录制宏;改变它的颜色什么的。如果您研究该宏,您会发现如何在对象模型中找到它们。

标签: excel vba plot scatter-plot


【解决方案1】:

您可以使用文本函数从源数据字符串中提取该信息。源数据可使用.SeriesCollection

activesheet.chartobjects("Chart 1").chart.SeriesCollection(1).Formula

将返回如下内容:

"=SERIES(,Sheet1!$A$1:$A$4,Sheet1!$B$1:$B$4,1)"

其中包含您需要的两列,“A”和“B”。您可以使用 INSTR()MID()LEFT() 等文本函数提取它们。这是一个使用 debug.print 输出列的示例。我假设您已经知道如何导出它们,因为您的问题中没有包含这些内容。

Sub FindSourceColumns()
    Dim sourcedata, firstcolumn, secondcolumn As String, c as chartobject

    for each c in activesheet.chartobjects
        sourcedata = c.Chart.SeriesCollection(1).Formula
        firstcolumn = Mid(sourcedata, InStr(sourcedata, "!$") + 2, 5)
        firstcolumn = Left(firstcolumn, InStr(firstcolumn, "$") - 1)
        Debug.Print firstcolumn
        secondcolumn = Mid(sourcedata, InStr(InStr(sourcedata, "!$") + 2, sourcedata, "!$") + 2, 5)
        secondcolumn = Left(secondcolumn, InStr(secondcolumn, "$") - 1)
        Debug.Print secondcolumn
    next c
End Sub

【讨论】:

  • 我认为这应该可以正常工作。是否可以遍历所有图并在 For 循环中执行相同操作?并且宏代码可以在循环中制作不同的绘图作为 ActiveChart 然后我可以编写 sourcedata = ActiveChart.SeriesCollection(1).Formula 吗?感谢您的快速帮助。
  • 我会声明一个变量,循环使用:对于 activesheet.chartobjects 中的每个 c,而不是使用 activechart。我会更新我的答案。
  • 当绘图的选择比两列中的两个小块更复杂时,这不起作用。与 A5、A9:A12 与 D5 一样,D9:D12 生成 A 作为第一列和第二列。你能想出一个很好的方法来处理这个问题吗?
  • 您可以反转字符串并在其中向后搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多