2011-07-11 36 views
2

所以我有這個包含大量數據的Workbook。而且我有一張基本上基於特定條件複製數據的表。Excel 2007 - 公式更改爲#REF

在每一行中的每個單元格看起來像這樣(最後指定的小區爲一個,其中式是在):

=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不能保持公式,因爲它沒有「幫助」我?

+0

你用什麼方法來更新'Numbers1'工作表中的數據?如果使用剪切/粘貼,Excel會銷燬舊的單元格引用,並用它「移動」的單元格覆蓋它們。如果您使用複製/粘貼,我相信它不應該這樣做。 – Farray

+0

Numbers1工作表中的數據通過宏導入。也許單元格引用會因此而被覆蓋?如果是這種情況,可能需要使用宏' –

+0

重新插入每個單元格的引用您是否有權訪問導入數據的宏?如果它是批量刪除行,然後添加新數據而不是清除現有數據,我不會感到驚訝。如果是這樣,很容易的事情就是改變數據更新的方法。如果沒有,下一個最好的事情就是編寫一個宏來重新編寫導入後的公式。 – Farray

回答

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個工作簿存儲宏,並在任何工作簿提供更新的數據集中更改數據。

希望對你有幫助...

+0

Thanx!然而,它有點反過來我試圖做這個工作。意思是,我想通過從A到M(13列)的每列和每列60行。我會盡量修改代碼並嘗試查看它是否可行。但是,再次,如果您有任何建議:) –

+0

我會繼續並將其設置爲答案。我的問題現在不是#REF引用,而是宏本身。新的話題:) –

+0

@Kenny我在示例中增加了一些細節。迭代你的行和列。 'Cells()'vba函數將返回一個Range,您可以從中獲取'.Address'屬性。希望這可以幫助... – Farray