Excel 2007 - 公式更改为#REF

时间:2011-07-11 05:52:42

标签: excel-vba excel-2007 formula excel-formula vba

所以我有这个包含大量数据的工作簿。我有一张基本上根据某些条件复制数据的表格。

每行中的每个单元格都是这样的(最后指定的单元格是公式所在的单元格):

=IF(Numbers1!E2<>0;Numbers1!A2;"")
=IF(Numbers1!E3<>0;Numbers1!A3;"")
=IF(Numbers1!E4<>0;Numbers1!A4;"")
=IF(Numbers1!E2<>0;Numbers1!B2;"")
=IF(Numbers1!E3<>0;Numbers1!B3;"")
=IF(Numbers1!E4<>0;Numbers1!B4;"")

因此,单元格A2中的公式是第一个,A3中的公式是第二行等。

我想从工作表Numbers1中的同一列和行复制值,如果E列的同一行中的值不是0.这似乎工作正常。

但是,当我更新Numbers1表中的数据时,公式突然无效,公式现在看起来像这样:

=IF(Numbers1!#REF!<>0;Numbers1!#REF!;"")

每个单元格中的每个公式看起来与上面的公式相同。而且我不能这样做,为什么Excel不能只是保持公式而不“帮助”我?

1 个答案:

答案 0 :(得分:2)

由于您最好使用宏来重写公式,因此以下是基础知识:

Sub RewriteFormulas()

    Dim row, col As Integer
    row = 1               'row you want your target formulas to be on

    For row = 1 To 60
        For col = 1 To 13

            ActiveSheet.Cells(row, col).Formula = "=IF(Numbers1!" & Cells(row,col).Address & "<>0,Numbers1!" & Cells(row+2,col).Adddress & ","""")"

        Next row
    Next col

End Sub

您可以使用不同的工作表(或不同的工作簿)而不仅仅是ActiveSheet,因此您可以拥有1个存储宏的工作簿,并在提供更新数据集的工作簿中更改数据。

希望有帮助...

相关问题