全部,
我有以下条件格式规则。如果单元格的条件格式为TRUE,我想用于将数据提取到另一个工作表(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语句的哪一部分是真的,因为我想在满足红色条件时勾选“严重”框,如果满足琥珀色条件则勾选“非严重”。
任何帮助都会非常感激。
答案 0 :(得分:0)
根据我的评论,您可以使用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
只要这是真的,它就会返回true。第一个公式是一个更具体的形式,但仍依赖于此。
所以我们只需要测试那个。
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
答案 1 :(得分:0)
我喜欢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 Function