首先,如果这是一个愚蠢的问题我会道歉,但我无法在网上找到答案。我有一个问题要问任何熟悉使用vba将相对公式改为绝对公式的人。
我现在的问题是,我的绝对公式是通过计算其他列(C列)的不同单元格条件的行差来确定的,因为我已经使用vba在列(B列)中输入了多个公式。因此,我想要实现的绝对公式是不可预测的,而且它正在不断变化。
Set Rng = Range(Cells(2, 3), Cells(lastrow, 3))
Range("B2").Select
startb = lastrow
For b = lastrow To 2 Step -1
If Cells(b, 3) <> Cells(b - 1, 3) Then
endb = b
rowdiff = startb - endb
Cells(end, 2).Select
ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" & rowdiff & "]C[-1],RC[-1])"
ActiveCell.Formula = Application.ConvertFormula(Formula:=ActiveCell.Formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
Selection.Copy
Range(Cells(startb, 2), Cells(endb, 2)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next b
你们可以看到我的代码行可以立即将相对公式转换为绝对公式。不幸的是,在我的COUNTIF公式中,我想要一个绝对范围(逗号前面的部分),但是需要一个相对标准(在这种情况下是逗号后面的RC [-1])。
我能做些什么才能将部分公式转换为绝对公式?或者没有这样的事情?非常感谢任何帮助和建议。如果我以完全错误的方式这样做,请告诉我。
感谢您的阅读和时间。
答案 0 :(得分:1)
至于你的部分将公式从相对转换为绝对除了最后一个单元格引用之外,你可以使用这个函数
Function LeaveLastRelative(strng As String) As String
LeaveLastRelative = Left(strng, InStrRev(strng, ",")) & Replace(Right(strng, Len(strng) - InStrRev(strng, ",")), "$", "")
End Function
其更详细和(可能)清晰的版本是:
Function LeaveLastRelative(strng As String) As String
Dim strng1 As String, strng2 As String
strng2 = Right(strng, Len(strng) - InStrRev(strng, ","))
strng1 = Left(strng, InStrRev(strng, ","))
LeaveLastRelative = strng1 & Replace(strng2, "$", "")
End Function
用作:
ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" & rowdiff & "]C[-1],RC[-1])"
ActiveCell.formula = Application.ConvertFormula(formula:=ActiveCell.formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
ActiveCell.formula = LeaveLastRelative(ActiveCell.formula) '<--| here you use the function