来自动态范围的图表
Chart from dynamic range
我正在使用 VBA 从动态图表制作图表。
图表按预期出现,但我希望 X 轴显示仅包含数据的列的 X 值。这里显示了所有列,包括没有任何数据的列。
下面是我的代码:
Dim rng As Range
Dim cht As Object
Dim LstRw2 As Long
Dim N As Long
N = Cells(1, 1).End(xlDown).Row
Set rng = Range("E2:O" & N)
Set cht = ActiveSheet.Shapes.AddChart
cht.chart.SetSourceData Source:=rng
cht.chart.ChartType = xlColumnClustered
ActiveSheet.ChartObjects("Chart 1").chart.SeriesCollection(1).XValues = _
"='Sheet1'!$F:$O"
End Sub
截至目前,它从另一个 sheet 获取 xvalues 但是我想使用当前工作sheet 作为值
在添加的图片中,x 轴不应显示 2021、2022、2023,因为它们没有任何数据。
请试试这个代码:
Sub MakeChart()
Dim rng As Range, cht As ChartObject, LstRow As Long, i As Long
Dim sh As Worksheet, lastCol As Long, lastC As Long, ColAddr As String
Set sh = ActiveSheet 'use here your sheet
LstRow = sh.Cells(Cells.Rows.count, 1).End(xlUp).row 'last row in A:A
'Last column on the third row
For i = 2 To LstRow
lastC = sh.Cells(i, Cells.Columns.count).End(xlToLeft).column
If lastC > lastCol Then lastCol = lastC
Next i
ColAddr = sh.Cells(1, lastCol).Address 'last column address (on first row)
Set rng = sh.Range(sh.Range("E2"), sh.Cells(LstRow, lastCol))
Set cht = ActiveSheet.ChartObjects.Add(left:=100, top:=80, width:=350, _
height:=250)
cht.Chart.SetSourceData source:=rng
cht.Chart.ChartType = xlColumnClustered
sh.ChartObjects(sh.ChartObjects.count).Chart.SeriesCollection(1).XValues = _
"='" & sh.Name & "'!$F:" & ColAddr
End Sub
我更新了代码以使用范围中较长的行,以便设置要使用的值 Chart.SeriesCollection(1).XValues
...
我正在使用 VBA 从动态图表制作图表。 图表按预期出现,但我希望 X 轴显示仅包含数据的列的 X 值。这里显示了所有列,包括没有任何数据的列。
下面是我的代码:
Dim rng As Range
Dim cht As Object
Dim LstRw2 As Long
Dim N As Long
N = Cells(1, 1).End(xlDown).Row
Set rng = Range("E2:O" & N)
Set cht = ActiveSheet.Shapes.AddChart
cht.chart.SetSourceData Source:=rng
cht.chart.ChartType = xlColumnClustered
ActiveSheet.ChartObjects("Chart 1").chart.SeriesCollection(1).XValues = _
"='Sheet1'!$F:$O"
End Sub
截至目前,它从另一个 sheet 获取 xvalues 但是我想使用当前工作sheet 作为值
在添加的图片中,x 轴不应显示 2021、2022、2023,因为它们没有任何数据。
请试试这个代码:
Sub MakeChart()
Dim rng As Range, cht As ChartObject, LstRow As Long, i As Long
Dim sh As Worksheet, lastCol As Long, lastC As Long, ColAddr As String
Set sh = ActiveSheet 'use here your sheet
LstRow = sh.Cells(Cells.Rows.count, 1).End(xlUp).row 'last row in A:A
'Last column on the third row
For i = 2 To LstRow
lastC = sh.Cells(i, Cells.Columns.count).End(xlToLeft).column
If lastC > lastCol Then lastCol = lastC
Next i
ColAddr = sh.Cells(1, lastCol).Address 'last column address (on first row)
Set rng = sh.Range(sh.Range("E2"), sh.Cells(LstRow, lastCol))
Set cht = ActiveSheet.ChartObjects.Add(left:=100, top:=80, width:=350, _
height:=250)
cht.Chart.SetSourceData source:=rng
cht.Chart.ChartType = xlColumnClustered
sh.ChartObjects(sh.ChartObjects.count).Chart.SeriesCollection(1).XValues = _
"='" & sh.Name & "'!$F:" & ColAddr
End Sub
我更新了代码以使用范围中较长的行,以便设置要使用的值 Chart.SeriesCollection(1).XValues
...