Hallo Zusammen, nun mal ein Simples Thema. Ich beschäftige mich gerade mit der Find-Methode. Ziel ist es die Spalten C & D zu vergleichen (Bei D könnte es vorkommen das ein neuer Datensatz dazu kommt (unsortiert) welcher in C noch nicht vorhanden ist, diesen muss ich dann finden) Um mich den ganzen anzunähern habe ich schon mal folgendes gemacht: (Auszug)
Code:
i5 = 1
For i4 = 1 To AnzahlSpalten Set rng = ActiveWorkbook.Worksheets("Spaltenabgleich").Range("C1:C1000").Find(Cells(i5, 4)) If rng Is Nothing Then MsgBox "nix gefunden" Else 'MsgBox "Zeile: " & rng.Row & "; Adresse: " & rng.Address MsgBox rng End If i5 = i5 + 1
Next
Natürlich funktioniert das wieder überhaupt nicht :22: . Wo ist der Fehler?
Der Sinn von meinem Code ist das Spalte D von 1 bis "Anzahlspalten" durchgearbeitet wird und jeder Wert einzeln mit Spalte C von C1 bis C1000 verglichen wird. ist der gleich Zelleninhalt vorhanden dann msgbox rng, wenn nicht dann msgbox "nix gefunden"
Ausgehend davon, dass Du AnzahlSpalten vorher bestimmt hast, könnte es so gehen Unter umständen Must Du noch bei Find angeben. In xl.Values oder xlFormulas und den Parameter xlWhole
For i= 1 To AnzahlSpalten With Worksheets("Spaltenabgleich").Range("C1:C1000") Set .Find(.Cells(i, 4)) End with If rng Is Nothing Then MsgBox "nix gefunden" Else 'MsgBox "Zeile: " & rng.Row & "; Adresse: " & rng.Address MsgBox rng End If
14.02.2016, 14:35 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2016, 14:35 von Rabe.)
Hi Mike,
(12.02.2016, 16:10)mikeho schrieb: Der Sinn von meinem Code ist das Spalte D von 1 bis "Anzahlspalten" durchgearbeitet wird und jeder Wert einzeln mit Spalte C von C1 bis C1000 verglichen wird. ist der gleich Zelleninhalt vorhanden dann msgbox rng, wenn nicht dann msgbox "nix gefunden"
ich verstehe nicht, warum Du, wenn Du die Spalte D von oben bis unten durchsuchen willst, warum Du als Obergrenze für die Zeilen in der For-Schleife dann AnzahlSpalten nimmst und nicht AnzahlZeilen!
@Ralf: Sorry für den "Code-Fetzen". Da ich mit dem Code sensible Daten bearbeite und dazu auch noch einige Variablen Namen haben welche nicht in öffentlichen Foren stehen sollten, habe ich mich dazu entschlossen nur einen Code-Fetzen anzubieten. Da ich aber so nicht weiterkomme, werde ich dann ein neues Beispiel erstellen und hier hochladen.
Facts: * Mit dem cmd Button sollen die Spalten c und d in dem Worksheet "Spaltenabgleich" verglichen werden. Ist in d ein neuer Datensatz drinnen, so soll dieser später (jetzt hätte ich es erstmal mit MSGBox gemacht) in einem weitern Tabellenblatt (Prüfung) ausgegeben werden.
With Worksheets("Spaltenabgleich") For i = 1 To AnzahlSpalten Set rng = .Range("C1:C1000").Find(.Cells(i, 4), lookat:=xlWhole, LookIn:=xlValues) If rng Is Nothing Then MsgBox "nix gefunden" Else MsgBox "Wert aus Zeile " & i & " gefunden in Zeile: " & rng.Row & "; Adresse: " & rng.Address 'MsgBox rng End If Next i End With
Du hast vieles doppelt gemoppelt bei Dir. Z.B hast belegst Du Variablen mehrmals und dann noch hin und her von Variable zu Variable. Dann hast Du völlig überflüssige Variablen und Schleifen.
kannst Du auch zwei Zeilen in dden von mir eingestellten Code rein nehmen, dann sähe es so aus:
Code:
With Worksheets("Spaltenabgleich") .Cells(1, 4) = "Neue NW Tabelle" .Range(.Cells(2, 4), .Cells(AnzahlSpalten, 4)) = Application.Transpose(Range(Cells(1, 1), Cells(1, AnzahlSpalten)).Value) For i = 1 To AnzahlSpalten Set rng = .Range("C1:C1000").Find(.Cells(i, 4), lookat:=xlWhole, LookIn:=xlValues) If rng Is Nothing Then MsgBox "nix gefunden" Else MsgBox "Wert aus Zeile " & i & " gefunden in Zeile: " & rng.Row & "; Adresse: " & rng.Address 'MsgBox rng End If Next i End With