2016-09-26 160 views
0

全部,複雜如果陳述VBA

我有以下條件格式規則。如果單元格的條件格式爲TRUE,我想用於將數據提取到另一個工作表(CM)。

但是,閱讀幾個論壇後,很明顯VBA無法檢測到條件格式的單元格是否爲「真」。

另外,作爲一種解決方法,我想將下面的語句放入if語句中。 (我的條件格式化語句)

我有兩個條件格式語句 第一個是層次結構; (顯示紅色)

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

層次結構中的第二被;(顯示橙色)

= F1> D1

任何人都可以提出這樣做​​的方式。 (我似乎與配售及/或語句轉換爲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語句的一部分是真實的,因爲我想打勾箱子「臨界」如果紅色條件得到滿足,如果滿足琥珀色條件,則爲「非關鍵」。

圖片添加上下文 enter image description here

任何幫助,將不勝感激。

回答

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 
+0

感謝這個完美的作品! :) –

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