2016-09-26 7 views
0

すべて、複合If文VBA

以下の条件付き書式設定ルールがあります。セルの条件付き書式設定がTRUEの場合、別のワークシート(CM)にデータを抽出するために使用したいと思います。

しかし、いくつかのフォーラムを読むと、条件付き書式設定されたセルが「TRUE」のときにVBAが検出できないことが明らかになりました。

また、回避策として、以下のステートメントをifステートメントに配置したいと思います。 (私の条件付き書式設定文)

私は2つの条件付き書式文を持っています。 第1位は階層構造です。

を(赤表示)= AND(F1> D1、OR((S1/D1)> = 1.15、T1> = 200000))

階層の2番目である(オレンジの表示)

= F1> D1

誰でもこれを行う方法を提案できますか?

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 

(私はVBAに配置AND/OR文と格闘しているようです)また、私は赤の場合は、「クリティカル」ボックスにチェックを入れたいとIF文の一部が真の占いの方法がありますアンバー条件が満たされている場合は「非クリティカル」になります。

画像は任意のヘルプははるかに高く評価されるだろうコンテキストのため enter image description here

を追加しました。

答えて

0

私のコメントとして、DisplayFormatで条件付き書式の色を得ることができます。あなたの2つの式が共通=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).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 

を使用すると、カラーテストを回避したい場合:また

一つの値だけを望むと直接値を割り当てるクリップボードをスキップすることをお勧めします

これが真であるときは常に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