有没有一种简单的方法来更改Excel VBA中的单元格引用?

我最近开发了一个工作模型,并收到了添加附加function的请求。

问题不在于添加,因为大多数情况下只需添加一个或两个额外的列。 但是,每次添加一列时,都必须逐行读取我的代码,并将每个公式参考(例如G)更改为H,H,I,I至J等。

有没有办法让我自动化这个过程,而不必单独更改每个配方,或者从头开始构build我的下一个模型时,我可以牢记的最佳实践?

例如,假设有人要求额外的计算,要求我在D列中插入一个公式。目前,我要去每列(下面例子中的H,J,K和L),并手动将它们更新为I, K,L和M。

'Year 1 ASP formula = (Year 1 Bookings) / (Year 1 Units) FormulaRange_ASP1 = "H23:H" & NumRows Range(FormulaRange_ASP1).Value = "=IFERROR(G23/F23,0)" Range(FormulaRange_ASP1).NumberFormat = "0.00" Application.ScreenUpdating = False 'Year 2 AR Units formula = (Year 1 Units) * (Vlookup AR Retention Rate for product in column C) FormulaRange_ARUnits2 = "J23:J" & NumRows Range(FormulaRange_ARUnits2).Value = "=IF(E23 = 12,VLOOKUP(D23,$B$8:$F$19,4,FALSE),0) * F23 * AR_Opt_In" Range(FormulaRange_ARUnits2).NumberFormat = "#,##0_)" Application.ScreenUpdating = False 'Year 2 AR ASP formula = (Vlookup ASP for product in column C) FormulaRange_AR_ASP2 = "K23:K" & NumRows Range(FormulaRange_AR_ASP2).Value = "=IFERROR(VLOOKUP(D23,$B$8:$F$19,2,FALSE),0)" Range(FormulaRange_AR_ASP2).NumberFormat = "0.00" Application.ScreenUpdating = False 'Year 2 AR Bookings formula = (Year 2 Units) * (Year 2 ASP) FormulaRange_AR_Bookings2 = "L23:L" & NumRows Range(FormulaRange_AR_Bookings2).Value = "=J23 * K23" Range(FormulaRange_AR_Bookings2).NumberFormat = "$#,##0_)" Application.ScreenUpdating = False 

我通常做的是添加一些常量到模块的开头(或一个单独的模块,对于较大的项目),列号参考。

 Const c_Column1 As Integer = 1 Const c_Column2 As Integer = 2 

因此,在整个代码中,您可以执行如下操作:

 For i = 2 to 10 ActiveSheet.Cells(i, c_Column1).Value = i Next i 

..而不必担心改变你的代码,只有常数。

注意使用Cells()而不是Range() ,因为它允许将列引用为数字。 要引用一个范围,你必须使用下面的sintax:

 With ActiveSheet For i = 2 to 10 .Range(.Cells(i, c_Column1), .Cells(i, c_Column2)).Value = i Next i End With 

您还可以将常量声明为String ,并将它们分配给列字符而不是数字。 引用范围可能会更容易,但是您必须在任何地方使用string连接。

一种可能性是使用相对R1C1参考。

例如,而不是在H23中指定一个公式:

 Range(FormulaRange_ASP1).Value = "=IFERROR(G23/F23,0)" 

您可以将其指定为:

 Range(FormulaRange_ASP1).FormulaR1C1 = "=IFERROR(R[0]C[-1]/R[0]C[-2],0)"