最初我想在公式的第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;">"&
答案 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
循环中,For
从i
开始,并以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
的行,则可能会丢失某些替换项。