测试条件格式是否为真VBA并高亮显示整行
我试图确定某个特定的单元格是否从条件格式中返回真值,然后在返回真值时高亮显示整行(甚至仅一个单元格)。条件格式在B列中,希望它突出显示整行 如果条件格式在B列中返回TRUE,我最终会尝试在F列中添加数字,但是如果我可以简单地确定条件格式是否返回TRUE,我就可以找出这一部分。我已经搜索了每一个论坛,网站,例子等,我可以找到,但仍然无法使其工作 我正在运行条件格式来搜索多个不同实例的大量数据。我能弄明白如何做的唯一方法是将每个条件作为单独的条件格式运行。下面是其中一个子集的一部分(每个子集大约有30种条件格式,大约有10个子集): 我这么说只是想说,我不能简单地用条件格式检查同一个测试,因为几乎有300个不同的测试 更新: 我尝试了吉普的建议,然后我在下面的评论中构建了多个潜艇,每个潜艇都有一个阵列以适应所有264个条件,但当我这样做时,它只突出显示了最后一个阵列,而不是第一个潜艇中满足的所有条件。我使用了与下面@Jeeped建议的代码相同的代码,但在数组中放入了24个条件,我可以将该代码分成11个子代码,我的主要代码如下所示:测试条件格式是否为真VBA并高亮显示整行,vba,excel,conditional-formatting,Vba,Excel,Conditional Formatting,我试图确定某个特定的单元格是否从条件格式中返回真值,然后在返回真值时高亮显示整行(甚至仅一个单元格)。条件格式在B列中,希望它突出显示整行 如果条件格式在B列中返回TRUE,我最终会尝试在F列中添加数字,但是如果我可以简单地确定条件格式是否返回TRUE,我就可以找出这一部分。我已经搜索了每一个论坛,网站,例子等,我可以找到,但仍然无法使其工作 我正在运行条件格式来搜索多个不同实例的大量数据。我能弄明白如何做的唯一方法是将每个条件作为单独的条件格式运行。下面是其中一个子集的一部分(每个子集大约有3
Public Sub REIT()
range("B:B").Select
Call A25
Call B25
Call C25
Call D25
Call E25
Call F25
Call G25
Call H25
Call I25
Call J25
Call K25
End Sub
最后,我只使用了两个帮助列来重新搜索条件并汇总所需的数据,但高亮显示仍然存在问题。构建一个数组并使用循环。可以处理对属性的引用
Option Explicit
Sub makeThreeCFrules()
Dim v As Long, vCFRs As Variant
vCFRs = Array("=ISNUMBER(SEARCH(""Acadia Realty Trust "", $B1))", vbYellow, _
"=ISNUMBER(SEARCH(""Aimco "", $B1))", vbYellow, _
"=ISNUMBER(SEARCH(""Alexandria Real Estate Equities, Inc"", $B1))", vbYellow)
With Selection.EntireRow
.FormatConditions.Delete
For v = LBound(vCFRs) To UBound(vCFRs) Step 2
With .FormatConditions.Add(Type:=xlExpression, Formula1:=vCFRs(v))
.Interior.Color = vCFRs(v + 1)
End With
Next v
End With
End Sub
公式的问题是需要使用$B1
锚定列
如果您可以将搜索词列表放在工作簿中的其他位置,则可以通过单个“反向通配符查找”来完成此操作
在第6页中搜索术语!A2:A4 搜索词范围中不包括任何空行是至关重要的。如果有,您将搜索一个双通配符,它将包含所有内容。当然,如果搜索条件可能发生更改,可以修改提供的子过程以查找搜索条件的地址
如果在选择B1:B99之后应用了条件格式规则,那么使用一个单独的检查列(如果愿意,可以隐藏该列),其中包含一个UDF,您可以在其中检查所有各种条件,如果为true,则在单元格中返回1,否则返回0。然后使用条件格式,您只需检查check列是否为1。您可以直接使用CF为整行着色。您可以使用条件逻辑与公式求和。您希望在VBA中执行此操作的任何特定原因?从您的代码判断,您对VBA不是很有经验。如果希望VBA进行着色,则不需要条件格式。使用一个或另一个,而不是两个。@Chrismeville,我对vba了解不够,无法生成足够长的UDF来检查所有条件。@teylyn不,我不是很有经验。使用下面Jeeped的代码,VBA突出显示了整行,但它仍然是有条件格式化的。那么您建议只使用sumif并使用数组作为条件?我很想知道如何让VBA在没有CF的情况下突出显示行,但我不知道怎么做。@Chrismeville我实际上使用了您建议的方法,命名了我正在搜索的条件以缩短公式,然后如果为真。。。很简单,我不知道我把它复杂化了。干杯,伙计。这是在告诉我数组中的连续行太多了。有275个条件,所以我只需要构建多个阵列吗?或者运行10个不同的sub并将它们调用到公共sub?我尝试运行多个数组,但没有突出显示所有数组。看起来,当我执行上面提到的操作时,它只突出显示了最后一个选项数组,而不是所有选项。知道为什么吗?我知道了。只需要删除.FormatConditions.delete行,然后在其余行中保留不正确的条件格式。您知道如何编辑代码,使其仅在所有数组运行后删除不真实的格式吗?谢谢你,吉普!我想我没有领会你想做什么。如果工作簿中的其他地方有这些搜索词的列表(例如Sheet6!a:a),则可以使用单个条件格式规则来完成此操作。我已经发布了上面的替代方法。不,我想你已经找到了。我可能把我的问题复杂化了。我最后做了一些和你刚才建议的非常相似的事情。你只是用了一种比我更简洁的方式。谢谢你的帮助!
Option Explicit
Sub makeThreeCFrules()
Dim v As Long, vCFRs As Variant
vCFRs = Array("=ISNUMBER(SEARCH(""Acadia Realty Trust "", $B1))", vbYellow, _
"=ISNUMBER(SEARCH(""Aimco "", $B1))", vbYellow, _
"=ISNUMBER(SEARCH(""Alexandria Real Estate Equities, Inc"", $B1))", vbYellow)
With Selection.EntireRow
.FormatConditions.Delete
For v = LBound(vCFRs) To UBound(vCFRs) Step 2
With .FormatConditions.Add(Type:=xlExpression, Formula1:=vCFRs(v))
.Interior.Color = vCFRs(v + 1)
End With
Next v
End With
End Sub
Option Explicit
Sub makeAllCFrules()
Dim v As Long, vCFRs As Variant
With Selection.EntireRow
.FormatConditions.Delete
With .FormatConditions.Add(Type:=xlExpression, _
Formula1:="=SUMPRODUCT(--ISNUMBER(MATCH(""*""&Sheet6!$A$2:$A$4&""*"",$B1, 0)))")
.Interior.Color = vbYellow
End With
End With
End Sub