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

问题描述 投票:12回答:7

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

=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等),但我不确定它在性能方面是否真的很重要。

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

excel excel-formula conditional-formatting
7个回答
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)))

4
投票

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

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

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

=AND(A1>B1,A1<C1)

1
投票

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

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

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

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

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


0
投票

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


0
投票

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

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

A1

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


0
投票

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

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

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

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

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

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

条件公式现在是:

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

哪个工作正常。

这使得Excel 2010中的代码从5s增加到1s。因为只要将数据加载到应用程序中,就会运行此代码,因此这种保存非常重要且对用户来说很明显。它也更清洁,可重复使用。

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


0
投票

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

=AND(COUNTIF(<rangename>,returnCellContent()=0,Cell_HasContent())
© www.soinside.com 2019 - 2024. All rights reserved.