使用AND()函数进行条件格式化

时间:2011-12-12 11:31:23

标签: excel excel-formula conditional-formatting

我在工作表上尝试条件格式化。我需要根据以下条件语句填充具有特定颜色的单元格:

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

当我单独尝试AND()函数中的语句时,它们似乎有效,但当我将它们放在函数中时,我看不到任何格式化。

以下是一些背景知识: &#34;当前列的第4行&#34;有一个日期(DATE1)。 &#34;当前行&#34;的D和E列上也有日期。 (DATE2和DATE3)。所以,如果DATE1在DATE2和DATE3之间,我想用一种颜色填充单元格。

我不明白为什么公式不起作用。非常感谢任何帮助。

更新(2011年12月13日):

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

注意:ActiveCell似乎不适合我。它使用在运行函数时选择的单元格数据。那不是我想要的。我当然可以通过电池本身(如A4,B7等),但我不确定它在性能方面是否真的重要。

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

7 个答案:

答案 0 :(得分:32)

我遇到了与AND()打破条件格式相同的问题。我碰巧尝试将AND作为乘法处理,它可以工作!删除AND()函数,只需乘以你的参数。 Excel会将布尔值视为1表示true,0表示false表示。我刚测试了这个公式,它似乎有效。

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5)))

答案 1 :(得分:4)

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

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

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

=AND(A1>B1,A1<C1)

答案 2 :(得分:1)

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

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

并发现我可以移除AND并加入与+

的两个比较
  = (x > A1) + (x <= B1)        [without all the spaces]

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

例如,如果要在单元格A1上开始的范围内使用此条件格式,可以尝试:

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

Excel将自动调整条件格式化到当前单元格。

答案 5 :(得分: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中的代码从5s增加到1s。因为只要将数据加载到应用程序中,就会运行此代码,因此这种保存非常重要且对用户来说很明显。它也更清洁,可重复使用。

我已花时间发布此消息,因为我无法在本网站或其他地方找到任何涵盖所有情况的答案,同时我确信还有其他人可以从中受益方法,可能需要更多的细胞来更新。

答案 6 :(得分:0)

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

=IF($C2="SomeText",0,1)+IF(INT($D2)>1000,0,1)=0