使用数组使用Excel VBA绘制XY散点图并更改水平(类别)轴标签
我对Excel VBA比较陌生,我正在尝试学习如何使用VBA脚本绘制图表。我有以下数据表(图1): 从这个数据表中,我想绘制一个图表(图2),如下所示。我已使用带有标记的线条图表类型,使用Excel的内置函数绘制了图表: 我用VBA编写了一个简单的代码来绘制类似类型的图表,但是使用数组,而不是直接从工作表中选择范围。我的VBA代码如下所示:使用数组使用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
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