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

我试图在一个工作表上的条件格式。 我需要根据以下条件语句填充一定颜色的单元格:

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

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

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

我看不出为什么公式不起作用。 任何帮助深表感谢。

更新(2011年12月13日):

我实现了一个函数,我从需要这个function的单元中调用。 该函数返回整数值。 然后条件格式只使用单元格中的整数。 这样,条件格式化就不复杂了。 我将INDIRECT(ADDRESS(ROW(); COLUMN()))传递给我实现的函数。 所以,当我使用相对和/或绝对单元格时,我掌握了所有需要的信息。 知道一个更简单的方法来将当前单元格作为范围传递给函数将是非常好的。

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

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

AND()打破了条件格式的问题。 我只是碰巧试着把AND当成乘法运算而已! 除去AND()函数,只是乘你的参数。 Excel会将布尔值视为1为真,0为假。 我只是testing这个公式,它似乎工作。

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

你可以使用一个更简单的公式。 我刚刚创build了一个新的工作簿来testing它。

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

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

 =AND(A1>B1,A1<C1) 

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

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

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

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

希望这可以帮助那些不太复杂的比较。

这可能是由于column()和row()函数的原因。 我不知道他们如何应用条件格式。 尝试使用此公式的值创build一个新列,然后将其用于您的格式需求。

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

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

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

Excel将自动适应条件格式化到当前单元格。

我目前负责一个有很多遗留代码的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。 最后,为了解决这个问题,我创build了两个用户定义的函数(使用我在本站其他地方find的提示):

 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秒。 因为无论何时将数据加载到应用程序中都会运行此代码,所以这种保存对于用户来说是显着的和显着的。 它也是更清洁和可重用的。

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