我有一个宏来创建没有标记的散点图。它读取始终为零的x轴值(在X列 - TIME中)。此列可以有20个值,或25或60 ...但最多100个值,它取决于。这个值有公式(我不知道这是否会影响我的问题)。我在Y和Z列中都有两个值(y值)。
当我运行宏时,它会读取X,Y和Z列,并创建图表。
这就是我所拥有的:
Sub Macro1()
Dim lastRow1 As Long
Dim lastRow2 As Long
Dim tempVal As String
Sheets("Sheet1").Select
Dim RowGraf As Long
Dim Invalue As Range
Dim Outvalue As Range
Dim ShName As String
With ActiveSheet
RowGraf = .Range("x" & .Rows.Count).End(xlUp).Row ' the number or rows can vary, that's why this is here
Set invalue = .Range("y4:y" & rowGraf)
Set Outvalue = .Range("z4:z" & RowGraf)
Set Time = .Range("x4:x" & RowGraf)
End With
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
With ActiveChart
.FullSeriesCollection(1).XValues = Time
.FullSeriesCollection(1).Values = Invalue
.SeriesCollection.NewSeries
.FullSeriesCollection(2).XValues = Time
.FullSeriesCollection(2).Values = Outvalue
.Axes(xlValue).MinimumScale = 0
.HasTitle = False
' axis titles
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "In/Out"
' add the legend
.FullSeriesCollection(1).Select
.FullSeriesCollection(1).Name = "=""In"""
.FullSeriesCollection(2).Name = "=""Out"""
.SetElement (msoElementLegendBottom)
' creates a new sheet for the chart
.Location Where:=xlLocationAsNewSheet, Name:="Chart"
End With
Sheets("Chart").Select
Sheets("Chart").Move After:=Sheets("Results")
End Sub
我的问题是,无论我在X列中有什么值,我的宏创建的图表总是具有从0到100的x轴值,例如,即使数据以8结尾。 该系列看起来没问题,y轴值正常,但x轴值完全不同。
如您所见,对于系列Invalue,我的最大值107出现在X 2.17。在图表中,它出现在大约18处。数据和x轴值之间存在差异。
如果我尝试选择数据"单击图表,水平值可以(它们是列值)。 如果我手动创建此图表,结果是完美的。但是当我运行宏时,就会出现这个问题。 我相信这与此有关:
RowGraf = .Range("x" & .Rows.Count).End(xlUp).Row ' the number or rows can vary, that's why this is here
Set invalue = .Range("y4:y" & rowGraf)
Set Outvalue = .Range("z4:z" & RowGraf)
Set Time = .Range("x4:x" & RowGraf)
这里我试着说我想从第4行开始选择所有具有值的行。我的目的是创建一个"动态范围"对于我的图表 - 如果我有10行,则选择10行。如果我有20,它会选择20行,依此类推。
在下图中,我手动创建了图表,并没有选择整个数据 - 它运行正常:
另一件事,也许是最重要的事情: 在X列中,我有100行公式。但如果它是 false ,则会写“” - 它们没有值(数字),但它们里面有一个公式。 当我尝试选择数据时,它可能正在读取所有100行,因为所有行都有公式。如果有值,我希望它选择数据。