我对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而不是xlXYScatter图表类型来绘制图表。但是这些点绘制在同一条线上。
我还尝试使用xychart.Axes(xlCategory).CategoryNames = Array(“ A”,“ B”,“ C”,“ D”)。但是存在编译错误。
请让我知道是否有人能够找到解决方案或错误是我的VBA代码。多谢!
答案 0 :(得分:0)
要使用文本标签,它不能是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