使用数组使用Excel VBA绘制XY散点图并更改水平(类别)轴标签

使用数组使用Excel VBA绘制XY散点图并更改水平(类别)轴标签,excel,vba,Excel,Vba,我对Excel VBA比较陌生,我正在尝试学习如何使用VBA脚本绘制图表。我有以下数据表(图1): 从这个数据表中,我想绘制一个图表(图2),如下所示。我已使用带有标记的线条图表类型,使用Excel的内置函数绘制了图表: 我用VBA编写了一个简单的代码来绘制类似类型的图表,但是使用数组,而不是直接从工作表中选择范围。我的VBA代码如下所示: Sub plot_test2() Dim ws2 As Worksheet Dim i, j, c, m, n, a, lrow As Long Di

我对Excel VBA比较陌生,我正在尝试学习如何使用VBA脚本绘制图表。我有以下数据表(图1):

从这个数据表中,我想绘制一个图表(图2),如下所示。我已使用带有标记的线条图表类型,使用Excel的内置函数绘制了图表:

我用VBA编写了一个简单的代码来绘制类似类型的图表,但是使用数组,而不是直接从工作表中选择范围。我的VBA代码如下所示:

Sub plot_test2()

Dim ws2 As Worksheet
Dim i, j, c, m, n, a, lrow As Long
Dim frist_code, frist_value, frist_name As Variant
Dim xychart As Chart
Set ws2 = Worksheets("Sheet2")
i = 1: j = 1: a = 1
c = 4: lrow = 6: m = 2: n = 1

ReDim frist_code(i To lrow - 1, j To c)
ReDim frist_value(i To lrow - 1, j To c)
ReDim frist_name(i To lrow - 1, j To c)

For i = 1 To lrow - 1
    For j = 1 To c
        frist_value(i, j) = ws2.Cells(m, n)
        frist_code(i, j) = j
        frist_name(i, j) = ws2.Cells(1, n)
        n = n + 1
    Next j
    n = 1
    m = m + 1
Next i

Set xychart = ws2.Shapes.AddChart2(332, xlXYScatter, Left:=0, Top:=0, Width:=400, Height:=300).Chart

For i = 1 To lrow - 1
    For j = 1 To c
        xychart.SeriesCollection.NewSeries
        With xychart.SeriesCollection(a)
            .name = frist_name(i, j)         'series names are assigned by frist_name array 
            .Values = frist_value(i, j)      'series values are assigned by frist_value array
            .XValues = frist_code(i, j)      'series XValues are assigned by frist_code array
            .MarkerSize = 15
        End With
        a = a + 1
    Next j
    j = 1
Next i
xychart.Axes(xlCategory).TickLabelPosition = xlLow
End Sub
当我运行宏时,我得到以下曲线图(图3):

我希望将水平轴标签重命名为A、B、C、D(如图2所示),而不是使用数组在VBA宏中使用1、2、3、4。我一直在尝试解决此问题,但在其他地方找不到正确的解决方案

我还尝试使用xlLineMarkers而不是XLXY散点图类型绘制图表。但这些点被绘制在同一条线上

我还尝试使用xychart.Axes(xlCategory.CategoryNames=Array(“A”、“B”、“C”、“D”)。但是有一个编译错误


请让我知道,如果有人能够找出解决方案或错误是我的VBA代码。非常感谢

要使用文本标签,它不能是XY散点图

您拥有的是折线图类型的数据。您需要以折线图的形式打印,按行打印,使用标记线打印,然后隐藏线。我还把标记放大了,因为在你的图表中它是这样的

这是我录制和修改的一个快捷键:

Sub Macro1()
  ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$D$6"), PlotBy:=xlRows
  Dim srs As Series
  For Each srs In ActiveChart.SeriesCollection
    srs.Format.Line.Visible = msoFalse
    srs.MarkerSize = 8
  Next
End Sub