切换散点图中每个系列的 X 和 Y 值

切换散点图中每个系列的 X 和 Y 值

哎呀!我的问题如下:我的数据表: 在此处输入图片描述

选择数据并创建散点图得到这样的结果: 在此处输入图片描述

然后对于每个系列我都必须手动编辑它们,切换 X 和 Y 值。 在此处输入图片描述

这为我提供了这样一张图表: 在此处输入图片描述

图表最终是我想要的,但是手动完成对我来说是不可接受的 - 是否有一个选项或快速的方法来生成最终的图表而无需手动切换?

谢谢!


编辑。正如一些人建议的那样,我尝试过将行与列进行切换,但不幸的是,它不起作用,结果如下: 在此处输入图片描述

答案1

这是一个更出色的例程,它只查看图表系列,而不假设工作表中的任何数据。它从系列公式开始,将其拆分为一个数组,反转数组的 X 和 Y 元素,然后将元素重新合并为修改后的公式,并重新应用新公式。

Sub SwitchXY()
  If Not ActiveChart Is Nothing Then
    Dim srs As Series
    For Each srs In ActiveChart.SeriesCollection
      Dim SrsFmla As String
      SrsFmla = srs.Formula
      '' =SERIES(name,xvalues,yvalues,number)
      Dim vFmla As Variant
      vFmla = Split(SrsFmla, ",")
      '' array {"=SERIES(name","xvalues","yvalues","number)"}
      Dim temp As String
      temp = vFmla(LBound(vFmla) + 1) ' xvalues
      vFmla(LBound(vFmla) + 1) = vFmla(LBound(vFmla) + 2)
      vFmla(LBound(vFmla) + 2) = temp
      '' array {"=SERIES(name","former yvalues","former xvalues","number)"}
      SrsFmla = Join(vFmla, ",")
      '' =SERIES(name,former yvalues,former xvalues,number)
      srs.Formula = SrsFmla
    Next
  End If
End Sub

下面是一些虚拟数据、由 Excel 绘制的 X 和 Y 数据制作的 XY 图表以及运行代码后的相同图表。

切换 XY 数据和前后图表

更新:

我以这个问题和答案为灵感,并在我的博客上的新教程中添加了一些更好的代码来解释更复杂的级数公式,在散点图中切换 X 和 Y 值

答案2

Sub CommonYGraph()

Dim ws As Worksheet
Dim Chart1 As Chart

Dim rowcount As Long
Dim colcount As Long
Dim x As Long

Dim Yvalues As Range
Dim Series_Name As Range
Dim DataRange As Range

Set ws = ActiveSheet

rowcount = Selection.Rows.Count
colcount = Selection.Columns.Count - 1

Set DataRange = Selection.Offset(0, 1).Resize(rowcount, colcount)

Set Yvalues = DataRange(1, 1).Resize(1, colcount)
Set Series_Name = Selection.Range(Cells(2, 1), Cells(rowcount, 1))

Set Chart1 = ws.Shapes.AddChart.Chart
Chart1.ChartType = xlXYScatterLines

For x = Chart1.FullSeriesCollection.Count To 1 Step -1
    Chart1.FullSeriesCollection(x).Delete
Next x

    For x = 1 To rowcount - 1
        Chart1.SeriesCollection.NewSeries
        With Chart1.SeriesCollection(x)
            .Xvalues = DataRange(1 + x, 1).Resize(1, colcount)
            .Values = Yvalues
            .Name = Series_Name(x)
        End With
    Next x

End Sub

我运行了上述代码,它或多或少根据您的图像生成了图形(网格线、图例位置、系列颜色和标记以及 x 值可能不同)。

在这种情况下,您已经选择了 C3 到 J3,然后运行 ​​vba 代码。

代码会根据您选择的范围将图表添加到现有工作表中,删除可能已生成的任何现有系列,然后分别添加每个系列,每个系列的 Y 值相同,X 值也不同。它还会添加系列名称。

波克

相关内容