2016-05-24 18 views
1

Entschuldigung, wenn dies bereits beantwortet wurde, obwohl ich gesucht habe und ohne Glück suchen. Kurz gesagt, ich versuche, die Zellenfarbe zu ändern, wenn dieser Zellenwert nicht mit einem Wert in einem benannten Bereich übereinstimmt.VBA - feststellen, ob ein Zellenwert (String) mit einem Wert (String) in einem benannten Bereich

Ich habe eine Reihe von Methoden versucht, obwohl keine für mich arbeiten, würde jede Hilfe von den VBA-Gurus sehr geschätzt werden.

Im Wesentlichen habe ich eine Liste von Werten auf Blatt1 (Erstellen) G2: G5000, die ich wissen muss, wenn sie Wert auf Blatt2 (Listen) nicht übereinstimmen S2: S64 < --this hat einen benannten Bereich von Make.

bitte eine Kopie meines aktuellen Code unter


Sub testMake() 

    Dim MkData As Range, MkVal As Range 
    Dim MKArray As Variant 

    Set MkData = Worksheets("Create").Range("G2:G5000") 
    Set MkVal = Worksheets("Lists").Range("Make") 

    For Each MyCell In MkData 
     If MyCell.Value <> Range("MkVal") Then 
      MyCell.Interior.ColorIndex = 6 
     Else 
      MyCell.Interior.ColorIndex = xlNone 
     End If 

    Next 


End Sub 

Dank Ihnen allen für jede Hilfe im Voraus zu sehen, habe ich für ein paar Tage in diesem gesucht, jetzt und zu sein scheinen nicht näher als wenn ich angefangen habe.

+0

Warum verwenden Sie dafür keine bedingte Formatierung (nicht-vba)? – brettdj

Antwort

0

Sie könnten Arbeitsblatt Funktion Vlookup werden unter Verwendung von zwischen den beiden Bereichen vergleichen:

Sub testMake() 

Dim MkData As Range, MkVal As Range 
Dim MKArray As Variant 
Dim result As Variant 

Set MkData = Worksheets("Create").Range("G2:G5000") 
Set MkVal = Worksheets("Lists").Range("Make") 

For Each MyCell In MkData 
    On Error Resume Next 
    result = Application.WorksheetFunction.VLookup(MyCell, MkVal, 1, False) 

    If Err <> 0 Then 
     result = CVErr(xlErrNA) 
    End If 

    If Not IsError(result) Then 
     MyCell.Interior.ColorIndex = xlNone 
    Else 
     MyCell.Interior.ColorIndex = 6 
    End If 
Next 

End Sub 
+0

YAY es funktioniert perfekt, ich habe noch eine Frage, wenn ich möchte, dass ich den Namen Bereich (derzeit auf "Make") abhängig von dem Wert der Zelle in der Spalte auf der linken Seite (gleiche Zeile) Ich nehme an, dass dies über die Offset-Funktion geschehen würde, obwohl ich es nicht funktionieren kann. Ich dachte so etwas wie Dim MkData Als Bereich, MkVal Als Bereich Dim MKArray As Variant Dim Ergebnis As Variant Dim nRange As Variant Set MkData = Worksheets ("Create") Bereich. ("G2: G5000") Nrange = MkData.Offset (0, 1) .Wert Set MkVal = Arbeitsblätter ("Listen"). Range ("nrange") – Jb86

1

Während ich die bedingte Formatierung verwenden würden, könnten Sie leicht Ihren Code wie unten anpassen dies programmatisch tun:

Sub testMake() 

Dim MkData As Range 
Dim MkVal As Range 
Dim MKArray As Variant 
Dim lngRow As Long 
Dim rng1 As Range 
Dim rng2 As Range 


MKArray = Worksheets("Create").Range("G2:G5000").Value2 
Set rng1 = Worksheets("Create").Range("G2") 

Set MkVal = Range("Make") 

For lngRow = 1 To UBound(MKArray) 
    If IsError(Application.Match(MKArray(lngRow, 1), MkVal, 0)) Then 
     If Not rng2 Is Nothing Then 
      Set rng2 = Union(rng2, rng1.Offset(lngRow - 1, 0)) 
      Else 
      Set rng2 = rng1.Offset(lngRow - 1, 0) 
     End If 
    End If 
Next 

If Not rng2 Is Nothing Then rng2.Interior.ColorIndex = 6 

End Sub