Excel:使用单元格中的文本作为条件格式公式中工作表的名称

Excel:使用单元格中的文本作为条件格式公式中工作表的名称

标题确实完全表达了我想要做的事情,但是有点复杂和晦涩,所以我将用一个用例来解释:

如果我有一个 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)

相关内容