全,
我有以下条件格式设置规则。如果单元格的条件格式为真,我想使用将数据提取到另一个工作表(CM)。
然而,通过阅读几个论坛,很明显,VBA无法检测条件格式的单元格是否为"TRUE“。
或者,作为一种变通办法,我想将下面的语句放入一个if语句中。(我的条件格式语句)
我有两个条件格式语句,层次结构中的第一个是;(显示为红色)
=AND(F1>D1,OR((S1/D1)>=1.15,T1>=200000))
层次结构中的第二个是;(显示橙色)
=F1>D1
有没有人能建议一下这样做的方法。(我似乎很难将AND / OR语句放入VBA中)
Dim LR As Long
LR = Range("A1048576").End(xlUp).Row
For X = 9 To LR Step 1
If Range("F" & X).Interior.ColorIndex = 3 OR Range("F" & X).Interior.ColorIndex = 45 Then
Dim LR1 As Long
LR1 = CM.Range("A1048576").End(xlUp).Row
RP.Range("B" & X, "D" & X).Copy
CM.Range("A" & LR1 + 1, "C" & LR1 + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
RP.Range("S" & X, "T" & X).Copy
CM.Range("D" & LR1 + 1, "E" & LR1 + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
End If
Next X还有一种方法可以判断IF语句的哪一部分是真的,因为如果满足红色条件,我想勾选一个框为"Critical“,如果满足琥珀条件,则勾选为"Non Critical”。
为上下文添加图片

任何帮助都将不胜感激。
发布于 2016-09-27 01:08:51
根据我的评论,您可以使用DisplayFormat获得条件格式颜色。
此外,当只需要值时,建议跳过剪贴板,直接赋值:
Dim LR As Long
Dim LR1 As Long
LR = Range("A1048576").End(xlUp).Row
For x = 9 To LR Step 1
If Range("F" & x).DisplayFormat.Interior.ColorIndex = 3 Or Range("F" & x).DisplayFormat.Interior.ColorIndex = 45 Then
LR1 = CM.Range("A1048576").End(xlUp).Row
CM.Range("A" & LR1 + 1, "C" & LR1 + 1).value = RP.Range("B" & x, "D" & x).value
CM.Range("D" & LR1 + 1, "E" & LR1 + 1).value = RP.Range("S" & x, "T" & x).value
End If
Next x如果你想避免颜色测试,你的两个公式有一个共同点=F1>D1
只要这是真的,它就会返回真。第一个公式是更具体的形式,但仍然依赖于此。
所以我们只需要测试这一个。
Dim LR As Long
Dim LR1 As Long
LR = Range("A1048576").End(xlUp).Row
For x = 9 To LR Step 1
If Range("F" & x).value > Range("D" & x).value Then
LR1 = CM.Range("A1048576").End(xlUp).Row
CM.Range("A" & LR1 + 1, "C" & LR1 + 1).value = RP.Range("B" & x, "D" & x).value
CM.Range("D" & LR1 + 1, "E" & LR1 + 1).value = RP.Range("S" & x, "T" & x).value
End If
Next x发布于 2016-09-27 07:17:05
我喜欢Scott Craner的回答,这可能是更好的方法。
您问是否可以确定条件格式是否已解析为True,答案是可以。困难之处在于,Excel有一些复杂的条件格式规则,您需要编写一些代码来涵盖每种情况。下面的代码显示了如何处理可能最常见的测试(即单元格值测试,如您的问题所示),但如果您愿意的话,我为您留下了扩展它的余地。
我猜,如果您不断更改格式条件规则,这种类型的方法会很方便,因为下面的代码将采用这些新规则:
Public Function EvaluatedFormatCondition(cell As Range) As Boolean
Dim item As Object
Dim res As Boolean
For Each item In cell.FormatConditions
If TypeOf item Is FormatCondition Then
Select Case item.Type
Case xlCellValue
Select Case item.Operator
Case xlEqual
res = (cell.Value = Evaluate(item.Formula1))
Case xlGreater
res = (cell.Value > Evaluate(item.Formula1))
Case xlLess
res = (cell.Value < Evaluate(item.Formula1))
Case xlGreaterEqual
res = (cell.Value >= Evaluate(item.Formula1))
Case xlLessEqual
res = (cell.Value < Evaluate(item.Formula1))
Case xlNotEqual
res = (cell.Value <> Evaluate(item.Formula1))
Case xlBetween
res = (cell.Value >= Evaluate(item.Formula1) And cell.Value <= Evaluate(item.Formula2))
Case xlNotBetween
res = (cell.Value < Evaluate(item.Formula1) Or cell.Value > Evaluate(item.Formula2))
End Select
End Select
If res And item.StopIfTrue Then
EvaluatedFormatCondition = True
Exit Function
End If
End If
Next
EvaluatedFormatCondition = res
End Functionhttps://stackoverflow.com/questions/39708329
复制相似问题