如何防止Excel的扩展数据范围格式和公式更改由代码输入的公式

时间:2019-04-26 15:11:21

标签: excel vba

代码执行结束后,Excel会将代码输入的公式的范围扩展为包括整个列表,而不是所输入的范围。我该如何预防?

在代码执行过程中检查公式时,范围显示正确。代码执行结束后,所有公式的范围都会扩大。如果不需要,我不想永久禁用扩展范围功能。

Application.ExtendList = False  
    oSht.Cells(oRow, 11).FormulaR1C1 = "=ROUND(100*SUMIF(R2C4:RC4,RC4,R2C8:RC8)/RC9,0)"  
Application.ExtendList = True

我希望后续行中的公式如下所示:

SUMIF($D$2:D845,D845,$H$2:H845)  
SUMIF($D$2:D846,D846,$H$2:H846)  
SUMIF($D$2:D847,D847,$H$2:H847)  
SUMIF($D$2:D848,D848,$H$2:H848)  

Excel将公式更改为如下形式:

SUMIF($D$2:D848,D845,$H$2:H848)  
SUMIF($D$2:D848,D846,$H$2:H848)  
SUMIF($D$2:D848,D847,$H$2:H848)  
SUMIF($D$2:D848,D848,$H$2:H848) 

1 个答案:

答案 0 :(得分:0)

此代码会将公式插入整个范围,更新相对于位置的非固定引用(例如,如果它没有“ $”,则将在您在行或列之间移动时进行更新),不需要循环:

with sheets("")
    .range(.cells(startRow,startCol),.cells(endRow,endCol)).formula = "=SUMIF($D$2:D845,D845,$H$2:H845)"
End with

如果要循环,则需要代码来更新相应于循环的公式,以便...请注意,它将确切的公式放在单元格中:

with sheets("")
    .cells(oRow,11).formula = "=SUMIF($D$2:D" & oRow-1 & ",D" & oRow & ",$H$2:H" & oRow-1 & ")"
End with