首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂的If语句VBA

复杂的If语句VBA
EN

Stack Overflow用户
提问于 2016-09-27 00:54:22
回答 2查看 308关注 0票数 0

全,

我有以下条件格式设置规则。如果单元格的条件格式为真,我想使用将数据提取到另一个工作表(CM)。

然而,通过阅读几个论坛,很明显,VBA无法检测条件格式的单元格是否为"TRUE“。

或者,作为一种变通办法,我想将下面的语句放入一个if语句中。(我的条件格式语句)

我有两个条件格式语句,层次结构中的第一个是;(显示为红色)

=AND(F1>D1,OR((S1/D1)>=1.15,T1>=200000))

层次结构中的第二个是;(显示橙色)

=F1>D1

有没有人能建议一下这样做的方法。(我似乎很难将AND / OR语句放入VBA中)

代码语言:javascript
运行
复制
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”。

为上下文添加图片

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 01:08:51

根据我的评论,您可以使用DisplayFormat获得条件格式颜色。

此外,当只需要值时,建议跳过剪贴板,直接赋值:

代码语言:javascript
运行
复制
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

只要这是真的,它就会返回真。第一个公式是更具体的形式,但仍然依赖于此。

所以我们只需要测试这一个。

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2016-09-27 07:17:05

我喜欢Scott Craner的回答,这可能是更好的方法。

您问是否可以确定条件格式是否已解析为True,答案是可以。困难之处在于,Excel有一些复杂的条件格式规则,您需要编写一些代码来涵盖每种情况。下面的代码显示了如何处理可能最常见的测试(即单元格值测试,如您的问题所示),但如果您愿意的话,我为您留下了扩展它的余地。

我猜,如果您不断更改格式条件规则,这种类型的方法会很方便,因为下面的代码将采用这些新规则:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39708329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档