2017-06-11 2 views
0

Ich versuche, bedingte Formatierung in 18 Zellen in der dritten Spalte ("C") festzulegen. Ich habe jeweils 6 Zellen in der ersten Spalte ("A") und nicht zusammengefasste (normale) Zellen in der zweiten Spalte ("B") zusammengeführt. Ich versuche, für jede nächste Zelle in Zeile der Spalte "C" zu überprüfen, ob in der ersten Zeile der Spalte "A" ein "Ja" ist oder ob in Spalte "A" ein "Nein" und in B "Spalte. Der Trick ist, ich möchte nur die erste Reihe von "A" Spalte, siebte, dreizehnte und neunzehnte überprüfen (also mit dem Schritt = 6) und überprüfen Sie jede Zeile in "B" Spalte. Ich versuche, so etwas wie diese:VBA Bedingte Formatierung mit veränderbaren Bedingungen

Sub try() 
    Dim i As Integer 
    Dim j As Integer 
    i = 1 

    For j = 1 To 12 
     With Range("C1:C18") 
      .FormatConditions.Delete 
      .FormatConditions.Add Type:=xlExpression, Formula1:="=OR(Cells(i, 1) = ""Yes""; AND(Cells(i, 1) = ""No""; Cells(j, 2) = ""Pass""))" 

     End With 
     If j Mod 6 = 0 Then 
      i = i + 6 

    Next j 
End Sub 

Aber es funktioniert nicht so, ich sah Beispiele mit spezifischen Zellen wie „A1“ oder „A3“ aber ich mag eine Zahl mit jeder Schleife zu erhöhen (so habe ich versucht, es mit Zellen (Zeile, Spalte)).

Antwort

0

Sie können es auf dem gesamten Bereich in einer Anweisung tun durch relative Adressen, so was zu C1 relativ zu A1 und B1 automatisch in den nachfolgenden Zeilen des Bereichs folgen gilt.

Der einzige Trick ist, den Wert in Spalte A, abgerufen werden, da dieser Wert in Zellen, die nur verfügbar ist A1, A7 usw. Diese OFFSET(A1,-MOD(ROW(C1)-1,6),0) durch den Ausdruck erreicht wird.

Sub doIt() 
    With Sheet1.Range("C1:C30").FormatConditions 
    .Delete 
    .Add(xlExpression, , _ 
     "=OR(OFFSET(A1,-MOD(ROW(C1)-1,6),0)=""yes"",AND(OFFSET(A1,-MOD(ROW(A1)-1,6),0)=""no"",B1=""pass""))") _ 
     .Interior.ColorIndex = 6 
    End With 
End Sub 

Sie können es auch über die GUI mit der gleichen Formel tun; Wählen Sie Zelle C1 und dann den gesamten Bereich C1:C30, und klicken Sie auf

Conditional Fomatting -> New rule -> Use a formula... und geben Sie die gleiche Formel ein.

BTW, der Ausdruck kann weiter vereinfacht werden, wenn Sie nicht überprüfen möchten, "no", was bedeutet, wenn Spalte A sichergestellt ist, entweder "Ja" oder "Nein" zu sein.

+0

Es funktioniert nicht in dieser Form – Asia

+0

@Asia Der Code ist vollständig getestet und funktioniert genau so, wie Sie beschrieben haben. Überprüfen Sie, ob Sie 'sheet1' haben, und dass Sie verschmolzene Regionen sind:' A1: A6', 'A7: A12',' A13: A18', 'A19: A24' und' A25: A30'. In Ihrem OP gibt es einen Fehler, der besagt: * "erste Zeile von" A "Spalte, sechste, zwölfte und achtzehnte (also mit dem Schritt = 6)" * Wenn der Schritt 6 ist, sollten die Zeilen '1, 7, 13, 19 sein ', das habe ich in meiner Antwort berücksichtigt. Aber Sie müssen es überprüfen. –

+0

Ja, ich meinte 1, 7, 13 und 19. Aber ich bekomme immer noch diese Nachricht: 'Laufzeitfehler' 5 'Ungültiger Prozeduraufruf oder Anweisung' – Asia

Verwandte Themen