在VBA中使用XLDOWN

我有一个生成数据透视表并将其粘贴到工作表中的macros。 我想对该表中的数据进行一些计算,然后从这些计算中创build一个图表。 目前我有下面的VBA,它工作正常,但数据透视表已经开始有不同数量的行,而不是总是48.我希望能够dynamic生成图表,无论有多less行数据透视表结束了。 数据透视表的数据总是以A64开头的(A63里面有我不需要的头文件),它的底部总有一个我不想要的东西,所以我想我将不得不使用xldown – 1类似。 表格中有多个表格,但是它们之间有空格。

我想我需要在这种情况下使用结束XLDOWN,但我不知道如何做到这一点。 谁能帮忙?

Range("Pivots!$E64).Formula = "=((C64/B64)/DATA!$Y$5)" Range("Pivots!$E65).Formula = "=((C65/B65)/DATA!$Y$5)" ... and so on down to Range("Pivots!$E111).Formula = "=((C111/B111)/DATA!$Y$5)" ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Range("Pivots!$E$64:$E$111") ActiveChart.SeriesCollection(1).XValues = "=Pivots!$A$64:$A$111" ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.ChartArea.Select ActiveChart.Parent.Cut Sheets("Front Sheet").Select Range("B23").Select ActiveSheet.Paste 

您可以将数据透视表的一行存储在:

 Dim LRow as Long LRow = Sheets("Pivots").Range("B3").End(XLDown).Row -1 

然后,您可以使用LRowvariables来表示数据透视表的最后一行。 你会想要使用循环来设置你的公式,如Dim LLoop As Long

 For LLoop = 64 To LRow Sheets("Pivots").Range("$E" & LLoop).Formula = "=((C" & LLoop & "/B" & LLoop & ")/DATA!$Y$5)" Next LLoop 

最后,您可以使用相同的LRowvariables来设置您的数据透视表的源数据和XValues。

 ActiveChart.SetSourceData Source:=Sheets("Pivots").Range("$E$64:$E$" & LRow) ActiveChart.SeriesCollection(1).XValues = "=Pivots!$A$64:$A$" & LRow 

不要单独输出每个公式,只需使用.FillDown方法即可 。

 With wsPivots lastPivotRow = .Range("E64").End(xlDown).Row - 1 .Range("E64").Formula = "=((C64/B64)/DATA!$Y$5)" .Range("E64:E" & lastPivotRow).FillDown End With 

正如@ Nick Peranzi所解释的那样 ,您可以为数据透露数据的最后一行分配一个variables,然后在代码中使用它。

另外值得一提的是,当使用VBA中的对象时,如果利用With...End With语句 ,它将提高速度。

 With ActiveChart .ChartType = xlLine .SetSourceData Source:=Range("Pivots!$E$64:$E$" & lastPivotRow) .SeriesCollection(1).XValues = "=Pivots!$A$64:$A$" & lastPivotRow End With