Excel 将公式的一部分从相对参考转换为绝对参考
最初,我想在公式的第82行中更改公式的各个部分Excel 将公式的一部分从相对参考转换为绝对参考,excel,vba,reference,Excel,Vba,Reference,最初,我想在公式的第82行中更改公式的各个部分 =SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"&A7383) 但是:有一个单独的列,其中的单元格具有 =SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;<="&$A7382;A:A;">"&$A7383) 这样,最后两个值都具有绝对列引用 因为代码找到了两个带$A的值。。。替换功能不能正常工作 (
=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"&A7383)
但是:有一个单独的列,其中的单元格具有
=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;<="&$A7382;A:A;">"&$A7383)
这样,最后两个值都具有绝对列引用
因为代码找到了两个带$A的值。。。替换功能不能正常工作
(在执行代码后,单元格看起来像
=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;”“&
)问题是字符串“SUMIFS($BI”&cl.Row-1
在公式中不存在,因此不会替换任何内容。请尝试以下行,它应该可以工作
cl.Formula = Replace(cl.Formula, "$BI" & cl.Row - 1, "$BI$" & cl.Row - 1)
现在,最好将变量i
声明为整数
,因为它用作行索引,而行索引是整数。这样我们就避免了双精度
(即浮点)算法的不精确性
Dim i As Integer
在For
循环中,i
从7383
开始,按81
的步骤递增。这很好。但是,i
不在replace语句中的任何位置使用。但是每个的循环通过列的所有行O
。不需要每个的。您可以访问单元格在列O
中,使用单元格(i,15)
。因此
的循环变为:
For i = 7383 To Cells(Rows.Count, 1).End(xlUp).Row Step 81
Cells(i, 15).Formula = Replace(Cells(i, 15).Formula, "$BI" & i - 1, "$BI$" & i - 1)
Next i
For
循环中i
的上限值由列A
的内容决定。如果列A
的行数少于列O
,则可能会遗漏一些替换项。感谢您的帮助。不幸的是,VBA在尝试编译时总是显示错误。首先,会出现一条消息appea红色表示我的变量rng没有定义,在尝试了一些事情之后,我现在在行Set rng=Range(“O:O”)中得到消息,表示类型不兼容。无论如何,我无法得到任何结果?当然:Sub AbsoluterBezug()Dim rng As Range Dim cl As Range Dim I As Double Set rng=(“O:O”)For I=7383 to Cells(Rows.Count,1).End(xlUp)。对于rng cl中的每个cl,第81行步骤。公式=替换(cl.Formula,$BI“&cl.Row-1,$BI$”&cl.Row-1)下一个cl下一个我结束Sub
刚刚看到一个我最初没有看到的问题。我将更新我的答案。因此,您建议将以下代码?Sub AbsoluteRef()Dim i作为i=7384的整数添加到单元格(Rows.Count,1)。结束(xlUp)。第81行单元格(i,15)。公式=替换(单元格(i,15)。公式,“SUMIFS($BI“&i-1,“SUMIFS($BI$”&i-1)”下一步我结束Sub
不幸的是什么也没发生。抱歉!刚才看到了“SUMIF”。我会更正它。今天早上我更新它时太早了:-)注意,15
用于列O
。
Dim i As Integer
For i = 7383 To Cells(Rows.Count, 1).End(xlUp).Row Step 81
Cells(i, 15).Formula = Replace(Cells(i, 15).Formula, "$BI" & i - 1, "$BI$" & i - 1)
Next i