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

时间:2019-07-01 21:01:00

标签: excel vba reference

最初我想在公式的第82行中更改公式的一部分

=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"&A7383)

所以我想将一千行的每个公式从(...;$BI7382;...;"<="&$A7382;...)更改为: (...;$BI$7382;...;"<="&$A$7382;...),其中$7382始终是包含上述公式的行的前一行。 因此,使用此公式的下一行将为$ 7464,其中我的代码应从(...;$BI7463;...;"<="&$A7463;...)更改为: (...;$BI$7463;...;"<="&$A$7463;...),依此类推。

我成功完成了您的代码

For i = 7383 To Cells(Rows.Count, 1).End(xlUp).Row Step 82
Cells(i, 1).Formula = Replace(Cells(i, 1).Formula, "$BI" & i - 1, "$BI$" & i - 1)
Cells(i, 1).Formula = Replace(Cells(i, 1).Formula, "$A" & i - 1, "$A$" & i - 1)

但是:这里只有一列,其中的单元格带有

=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;<="&$A7382;A:A;">"&$A7383)

最后一个值已更改为

">"&A7383to">"&$A7383

使得最后两个值都具有绝对列引用

因为代码使用$ A找到两个值... replace函数无法正常工作 (执行代码后,单元格看起来像=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"&

1 个答案:

答案 0 :(得分:0)

问题是您的公式中不存在字符串PDFParser parser =new PDFParser(new org.apache.pdfbox.io.RandomAccessFile(file, "r")); ,因此没有替换任何内容。尝试以下行,它应该可以工作。

"SUMIFS($BI" & cl.Row - 1

现在,最好将变量cl.Formula = Replace(cl.Formula, "$BI" & cl.Row - 1, "$BI$" & cl.Row - 1) 声明为i,因为它用作行索引,并且行索引是整数。这样,我们就可以避免Integer(即浮点)算法的不准确性。

Double

Dim i As Integer 循环中,Fori开始,并以7383的步长递增。很好但是,在替换语句中的任何地方都没有使用81。但是i遍历列For Each的所有行。不需要O。您可以使用For Each访问列O中的单元格。因此Cells(i, 15)循环变为:

For

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 循环中i的上限值由列For的内容确定。如果列A的行少于列A的行,则可能会丢失某些替换项。