标题确实完全表达了我想要做的事情,但是有点复杂和晦涩,所以我将用一个用例来解释:
如果我有一个 Excel 工作簿,其中有两张彼此非常接近的工作表(SheetA 和 SheetB),并且我想在视觉上突出显示差异,那么典型的方法可能是这样的:
- 在 SheetA 中,突出显示所有单元格
- 输入条件格式,新规则,使用公式
- 在公式框中输入:
=a1<>SheetB!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)