引用儲存格的公式而不是 Excel 中的值?

引用儲存格的公式而不是 Excel 中的值?

假設在 A1 中我有「=ROW()」。該儲存格顯示“1”,因為它是工作表中的第一行。

現在在 A2 中,我輸入“=A1”。不幸的是,這引用了 A1 的 VALUE,而不是公式。如果它引用公式,那麼 A2 將給出值“2”(這就是我想要的)。

如果我之後繼續更改 A1 中的公式,那麼 A2 的值也會更改,因為它依賴 A1 中的公式。

我該怎麼辦?

答案1

無法使用 Excel 工作表函數本機執行此操作。如果您需要此功能,則必須使用 VBA。

您可以使用 Worksheet_Change() 事件。當儲存格內容發生變更時,它將觸發,但不會在簡單的重新計算時觸發。它有一個參數指示已更改的單元格;您可以使用它來查看是否需要執行任何操作。此程式碼需要放入您正在使用的工作表的程式碼區域中。 (使用 Alt+F11 開啟 VBA;在左側面板中,雙擊工作表。您應該會看到類似「Microsoft Visual Basic -檔案名稱- [工作表名稱(代碼)]”在標題列中。)

顯然,請根據以下程式碼的要求更新工作表名稱和範圍。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim test As Range, src As Range, dest As Range

    Set src = Worksheets("Sheet1").Range("A1")
    Set dest = Worksheets("Sheet1").Range("A2")
    Set test = Intersect(Target, src)
    If Not (test Is Nothing) Then
        dest.Formula = src.Formula
    End If
End Sub

上面的程式碼將準確複製公式 - 如果您引用儲存格 A1 中的儲存格 F3,您也會引用儲存格 A2 中的儲存格 F3。如果您不希望發生這種情況,請將 If 語句內的行變更為dest.FormulaR1C1 = src.FormulaR1C1。這將適當地改變公式中的任何相對引用。

dest如果您想根據儲存格 A1 中的公式一次設定一堆儲存格,您可以變更為更大的範圍。

需要注意的是,如果您更改這些單元格,這不會自動恢復單元格中的公式- 即,如果您更改A2 中的公式,這不會自動將其恢復,因為我們僅在單元格A1 時進行更新變化。如果您想防止這種情況,請更改線路

Set test = Intersect(Target, src)

Set test = Intersect(Target, Union(src, dest))

答案2

您可以使用表格來實現它(從 Excel 2007 開始:選擇您的範圍,然後:插入 - 表格;第一行需要包含標題)。
每當您更改公式時,整個列中的公式都會更新(或者如果列中的公式與更改前不同,系統會詢問您是否希望更新公式)。

更新

這裡您可以找到如何在表中建立計算列的詳細說明。
現在,如果您變更任何儲存格中的公式,整個列都會更新。(辦公室支援)
如果您不是這種情況,請確保在「檔案」-「選項」-「校對」-「鍵入時自動套用格式」標籤中選取「在表格中填寫公式以建立計算列」。

相關內容