Excel 2007-公式更改为#参考

Excel 2007-公式更改为#参考,excel,excel-2007,formula,excel-formula,vba,Excel,Excel 2007,Formula,Excel Formula,Vba,我有一本包含大量数据的工作簿。我有一张纸,基本上是根据特定条件复制数据的 每行中的每个单元格如下所示(最后指定的单元格是公式所在的单元格): =IF(Numbers1!E20;Numbers1!A2;“”) =如果(数字1!E30;数字1!A3;“”) =如果(数字1!E40;数字1!A4;“”) =如果(数字1!E20;数字1!B2;“”) =如果(数字1!E30;数字1!B3;“”) =如果(数字1!E40;数字1!B4;“”) 所以单元格A2中的公式是第一行,A3中的公式是第二行,以此类

我有一本包含大量数据的工作簿。我有一张纸,基本上是根据特定条件复制数据的

每行中的每个单元格如下所示(最后指定的单元格是公式所在的单元格):

=IF(Numbers1!E20;Numbers1!A2;“”)
=如果(数字1!E30;数字1!A3;“”)
=如果(数字1!E40;数字1!A4;“”)
=如果(数字1!E20;数字1!B2;“”)
=如果(数字1!E30;数字1!B3;“”)
=如果(数字1!E40;数字1!B4;“”)
所以单元格A2中的公式是第一行,A3中的公式是第二行,以此类推

如果E列的同一行中的值不是0,我想从图纸编号1复制同一列和行中的值。这似乎工作得很好

但是,当我更新数字1表中的数据时,公式突然失效,现在的公式如下所示:

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

每个单元格中的每个公式看起来与上面的公式相同。我无法做到这一点,为什么Excel不能在不“帮助”我的情况下保持公式的原样?

既然您最好使用宏重写公式,下面是一些基本内容:

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
子公式()
Dim行,列为整数
行=1'您希望目标公式位于的行
对于行=1到60
对于col=1到13
ActiveSheet.Cells(行,列).Formula=“=IF(Numbers1!”&单元格(行,列).Address&“0,Numbers1!”&单元格(行+2,列).addAddress&“,”)
下一排
下一列
端接头
您可以使用不同的工作表(或不同的工作簿),而不仅仅是
ActiveSheet
,这样您就可以有一个工作簿来存储宏,并在提供更新数据集的任何工作簿中更改数据


希望这有助于……

您使用什么方法更新“数字1”工作表中的数据?如果使用剪切/粘贴,Excel将销毁旧的单元格引用,并用其“移动”的单元格覆盖它们。如果使用“复制/粘贴”,我认为不应该这样做。Numbers1工作表中的数据是通过宏导入的。可能是因为这个原因,单元格引用被覆盖了?如果是这种情况,也许我需要使用宏重新插入每个单元格的引用“您有权访问导入数据的宏吗?”?如果批量删除行,然后添加新数据,而不是清除现有数据,我不会感到惊讶。如果是这样,那么简单的事情就是改变数据更新的方法。如果不是,下一个最好的办法是编写宏,在导入后重新编写公式。我认为后者最好,因为宏是由提供从数据库读取数据的软件的公司编写的。所以这是一种“他们的财产”。但在这种情况下,我需要一个Sub来完成这项工作,而不需要太多代码。每个公式本质上是相同的,唯一的区别是对公式所在单元格的引用。因此,如果很容易从单元格“我在”中获取单元格编号,那么创建公式就更容易了。我自己试试看,但如果你有任何建议,我很乐意试试:)Thanx!然而,这有点相反,我正在努力使这项工作。也就是说,我想从A到M(13列)遍历每一列,每列60行。我会试着修改一下代码,看看是否可行。不过,如果你有任何建议的话:)我会继续,把这个作为答案。我现在的问题不是#REF引用,而是宏本身。新主题:)@Kenny I为示例添加了更多细节。遍历行和列。
Cells()
vba函数将返回一个范围,您可以从中获取
.Address
属性。希望这有助于。。。
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