14

我正在尝试在工作表上设置条件格式。我需要根据以下条件语句用某种颜色填充单元格:

=AND((INDIRECT(ADDRESS(4;COLUMN()))>=INDIRECT(ADDRESS(ROW();4)));(INDIRECT(ADDRESS(4;COLUMN()))<=INDIRECT(ADDRESS(ROW();5))))

当我分别尝试 AND() 函数中的语句时,它们似乎可以工作,但是当我将它们放在函数中时,我看不到任何格式发生。

这里有一些背景:“当前列”的第 4 行有一个日期 (DATE1)。“当前行”(DATE2 和 DATE3)的 D 和 E 列也有日期。所以,如果 DATE1 介于 DATE2 和 DATE3 之间,我想用颜色填充单元格。

我不明白为什么这个公式不起作用。任何帮助深表感谢。

更新(2011 年 12 月 13 日):

我实现了一个从需要此功能的单元格中调用的函数。该函数返回整数值。然后条件格式仅使用单元格中的整数。这样,条件格式就不那么复杂了。我将 INDIRECT(ADDRESS(ROW();COLUMN())) 传递给我实现的函数。因此,在处理相对和/或绝对单元格时,我拥有所需的所有信息。很高兴知道将当前单元格作为范围传递给函数的更简单方法。

注意:ActiveCell 似乎对我不起作用。它使用函数运行时选择的单元格中的数据。这不是我要找的。我当然可以通过单元格本身(如 A4、B7 等),但我不确定它在性能方面是否真的很重要。

感谢所有回答我问题的人。

4

7 回答 7

41

我在 AND() 打破条件格式时遇到了同样的问题。我只是碰巧尝试将 AND 视为乘法,它有效!删除 AND() 函数,然后将您的参数相乘。Excel 会将布尔值视为 1 表示真,0 表示假。我刚刚测试了这个公式,它似乎有效。

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5)))
于 2012-02-15T23:13:32.803 回答
4

您可以使用更简单的公式。我刚刚创建了一个新的工作簿来测试它。

Column A = Date1 | Column B = Date2 | Column C = Date3

突出显示 A 列并输入条件格式公式:

=AND(A1>B1,A1<C1)
于 2011-12-12T11:38:55.650 回答
1

我有一个不太复杂的公式的类似问题:

= If (x > A & x <= B) 

发现我可以删除AND并加入两个比较+

  = (x > A1) + (x <= B1)        [without all the spaces]

希望这可以帮助其他人进行不太复杂的比较。

于 2013-06-24T14:21:24.353 回答
0

这可能是因为 column() 和 row() 函数。我不确定它们如何应用于条件格式。尝试使用此公式中的值创建一个新列,然后将其用于您的格式需求。

于 2011-12-12T11:34:23.663 回答
0

COLUMN()并且ROW()不会以这种方式工作,因为它们被应用于调用它们的单元格。在条件格式中,您必须是显式的而不是隐式的。

例如,如果您想对从 cell 开始的范围使用此条件格式A1,您可以尝试:

`COLUMN(A1)` and `ROW(A1)`

Excel 将自动调整条件格式以适应当前单元格。

于 2011-12-12T14:36:30.510 回答
0

我目前负责一个带有大量遗留代码的 Excel 应用程序。此代码中最慢的部分之一是循环遍历 6 列中的 500 行,为每列设置条件格式公式。这些公式用于识别单元格内容在哪里非空白但不构成命名范围的一部分,因此两次引用单元格本身,最初写为:

=AND(COUNTIF(<rangename>,<cellref>)=0,<cellref><>"")

显然,通过一次更新每列(范围)中的所有单元格可以大大减少开销。但是,如上所述,在这种情况下使用 ADDRESS(ROW(),COLUMN(),n) 不起作用,即这不起作用:

=AND(COUNTIF(<rangename>,ADDRESS(ROW(),COLUMN(),1))=0,ADDRESS(ROW(),COLUMN(),1)<>"")

我用一个空白的工作簿进行了广泛的实验,但找不到解决这个问题的方法,使用各种替代方法,如 ISBLANK。最后,为了解决这个问题,我创建了两个用户定义函数(使用我在本网站其他地方找到的提示):

Public Function returnCellContent() As Variant

  returnCellContent = Application.Caller.Value

End Function

Public Function Cell_HasContent() As Boolean

  If Application.Caller.Value = "" Then
    Cell_HasContent = False
  Else
    Cell_HasContent = True
  End If

End Function

现在的条件公式是:

=AND(COUNTIF(<rangename>,returnCellContent()=0,Cell_HasContent())

效果很好。

这加快了 Excel 2010 中的代码从 5 秒到 1 秒的速度。因为每当数据加载到应用程序中时都会运行此代码,因此这种节省对用户来说意义重大且显而易见。它也更清洁和可重复使用。

我花时间发布这个是因为我在这个网站或其他地方找不到任何涵盖所有情况的答案,而我确信还有其他人可以从上述方法中受益,可能会有更多的数字要更新的单元格。

于 2015-04-03T13:18:19.460 回答
0

与其他人报告的问题相同 - 使用 Excel 2016。发现对表格应用条件公式时;AND,条件相乘,条件相加失败。必须自己创建 TRUE/FALSE 逻辑:

=IF($C2="SomeText",0,1)+IF(INT($D2)>1000,0,1)=0
于 2017-12-20T21:24:03.910 回答