VBA改变了复杂的公式

时间:2018-06-02 17:44:39

标签: excel vba excel-vba excel-formula radio-button

我使用带有单选按钮的代码(参见最后一个代码)在行15中插入一个新行,它将旧数据向下推,同时将相同的公式复制到曾经存在的第15行(行中) 15)点击按钮之前。

单击按钮后,我可以在E15中输入3位数据,然后按Enter键,所有公式将根据在E15中输入的内容在第15行计算。

现在我喜欢代码的执行方式,但出于某种原因,CG15中的公式从

变为现实
=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF14:CF$14,MATCH(9.99999999999999E+307,CF14:CF$14)):CF15),""),"")

=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF13:CF$14,MATCH(9.99999999999999E+307,CF13:CF$14)):CF15),""),"")

我无法弄清楚问题是否在CG15的代码或公式中 这是一个“测试”文件,下面是代码

test sheet

Sub AddNewDrawing()
'
' AddNewDrawing Macro
'

'
    Rows("15:15").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A16:ua16").Select
    Selection.AutoFill Destination:=Range("A15:ua16"), Type:=xlFillDefault
    Range("A15:ua16").Select
    Range("E15").Select
    Selection.ClearContents
End Sub

这可能是简单的修复,但我很难过。我需要公式保持不变而不是改变。

以下是有关每个代码的详细信息。 CF15列具有此公式,如果满足条件,则返回1.

=IF(COUNTIF($AW16:$CC18,O15),1,IF(COUNTIF($AW16:$CC18,P15),1,IF(COUNTIF($AW16:$CC18,Q15),1,"")))

列CG15具有此公式,用于计算CF15列中每个1之间的跳过(空白单元格)。 注意:CG $ 14有一个永久0(零),作为计数开头的占位符。

=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF14:CF$14,MATCH(9.99999999999999E+307,CF14:CF$14)):CF15),""),"")

谢谢

1 个答案:

答案 0 :(得分:1)

当您插入新行15时,CG15中的公式被下推到CG16,公式中引用第15行的相对地址(例如CF15)变为第16行(例如CF16)。

然而,像CF14一样小于15的相对地址不受行插入的影响。当您将公式从CG16“回填”到CG15时,它们都会受到影响,因此CF14:CF $ 14变为CF13:CF $ 14,就像CF16恢复到原来的CF15一样。

将公式更改为不受行插入或回填之间相对差异影响的值。

行相对CF14可以用CG15编写,

index(CF:CF, row()-1)

这就是你的公式,

=IF(CF15=1, COUNTBLANK(INDEX(CF$14:index(CF:CF, row()-1), MATCH(1e99, CF$14:index(CF:CF, row()-1))):CF15), text(,))