
標題確實完全表達了我想做的事情,但它有點複雜和神秘,所以我將用一個用例來解釋:
如果我有一個 Excel 工作簿,其中有兩張彼此非常接近的工作表(SheetA 和 SheetB),並且我希望差異能夠在視覺上突出顯示,那麼典型的方法可能是這樣的:
- 在 SheetA 中,反白顯示所有儲存格
- 輸入條件格式、新規則、使用公式
- 在公式框中輸入:
=a1<>工作表B!a1
- 應用所需的格式並點擊“確定”
基本上,它的作用是將 SheetA 中的每個單元格與 SheetB 中的對應單元格進行比較,如果它們不相等,則會套用格式設定。如果工作表名稱很複雜(特別是如果它們包含空格,因此需要引號),則在公式輸入期間單擊選項卡名稱會很有幫助。
但現在假設在 SheetA 的某個單元格中,我已輸入包含 SheetB 名稱的文字表達式,並且我想在上面的條件格式公式中引用該儲存格。
(為什麼?我可能有 100 個電子表格,並且希望透過更改儲存格中的文字來比較 1 到 2、然後是 1 到 3、然後是 1 到 55,而不是每次都手動更改條件格式。)
我怎樣才能做到這一點?
我知道 INDIRECT 函數用於將文字轉換為工作表名稱,並嘗試了該主題的多種變體,使用 INDIRECT 函數作為條件格式公式的一部分,但似乎沒有任何效果。
答案1
使用以下條件格式公式:
= A1 <> INDIRECT(ADDRESS(ROW(A1), COLUMN(A1),,, aSheet), TRUE)
替換aSheet
為對儲存要比較的工作表名稱的儲存格的參考。
這ADDRESS()
函數將單元格引用組裝為文字字串,使用ROW()
和COLUMN()
函數計算正在計算的單元格的行和列。
您可以跳過該ADDRESS()
函數,只使用字串連接以 R1C1 格式建立單元格引用,但上面的公式可能更容易閱讀和理解。等價的是:
= A1 <> INDIRECT(aSheet & "!R" & ROW(A1) & "C" & COLUMN(A1), FALSE)