2015-11-02 82 views
1

我有一列指示项目进度(以百分比表示),如果在相应的行中没有字母P,则该列会变成红色。用下面的公式一件很奇怪的事情发生:根据单元格区域中显示的字母来突出显示列中的单元格

=ISERROR(FIND("p",$H5:$Y65)) 

所以我已经设置P不是一个错误,并且不包含P应该被格式化的红色细胞。但是,用这个公式,只有在第一列有P,即H是格式。该公式似乎忽略了H.之后的所有其他列。

有什么建议吗?

+0

您可能会澄清*仅当第一栏中有P时,即H是否与*一起格式化* *如果在相应的行中没有字母“P”*,它应该变为红色。 – pnuts

回答

1

FIND没有你所寻求的功能,它会搜索不是内阵列一个内。尝试从相关列中的第5行到第65行以及HOME>样式 - 条件格式,新规则...,使用公式确定要格式化哪些单元格此公式为真的格式值:

=ISERROR(MATCH("P",$H5:$Y5,0)) 

格式...,选择红色填充,确定,确定。

假设P是整个单元格的内容,而不仅仅是一部分。

+1

这工作就像一个梦想!谢谢大家的贡献:) –

0

我会重新考虑你的范围,你说相应的行,是Y65而不是Y5印刷错误?如果用当前公式填充,则会出现重叠单元格,因为下一行将覆盖H6:Y66和范围H6:Y65将被再次检查。

也就是说,PNUTS是正确的,但你可以用一个用户自定义函数,如实现这一目标:

Function BooleanRangeFind(SearchRange As Range, MatchCriteria As String, CaseSensative As Boolean) As Boolean 
Dim Rng As Range 
Dim CurStr As String 
'checks and changes the MatchCriteria to Uppercase, this is 
'the easiest way to ignore case sensativity 
If CaseSensative = False Then MC = UCase(MatchCriteria) 
'iterates through each cell in the range and checks for the MatchCriteria 
'in each cell 
For Each Rng In SearchRange 
    'Case Sensativity Check 
    If CaseSensative = False Then 
     CurStr = UCase(Rng.Value) 
    Else 
     CurStr = Rng.Value 
    End If 
    If InStr(1, CurStr, MC) <> 0 Then 
    'If the MC is in the Current Range 
    'the formula stops looking and returns 
    'a true 
     BooleanRangeFind = True 
     Exit Function 
    End If 
Next Rng 
'Default Value is False 
BolleanRangeFind = False 
End Function 

如果您的公式是,要么

=BooleanRangeFind($H6:$Y65,"p",False) 

,或者如果我的假设是正确的:

=BooleanRangeFind($H6:$Y6,"p",False) 
+1

这将允许你检查P是否包含在一个字符串中,如果P是整个单元格内容,pnuts的解决方案就简单多了。 – Schalton

相关问题