Excel 将公式的一部分从相对参考转换为绝对参考

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的值。。。替换功能不能正常工作 (

最初,我想在公式的第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;”“&
)问题是字符串
“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