Find Methode
#1
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?
Top
#2
Hallo Mike

Leider komme ich mit dem Code nicht einmal ansatzweise zurecht, ginge es nicht auch mit zählenwenn odem dem summenprodukt?

Falls es vba sein sollte, müsste m.E. eine Schleife nacheinander alle Werete der Spalte c auslesen und als Suchbegriff mit find in spalte d suchen.

Mfg
Top
#3
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 brauche es leider in VBA.
Top
#4
Hallo,

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

Next i
Gruß Atilla
Top
#5
Hi,

Noch ein Versuch:

Falls die zu durchsuchenden Spalten d:f seien, für 100 Zeilen:

=summenprodukt(--(c1=d1:f100))

Formel nach unten kopieren.

Immer wenn das Ergebnis 0 ist, ist "nix gefunden"

Mfg
Top
#6
Hi!
Einen unvollständigen, unformatierten Code-Fetzen ohne Datei einzustellen, hilft nicht wirklich!

Dann man tau …

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
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!
Top
#8
Sorry für die verspätete Antwort.

@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.

@Attilia: Nee, geht nicht. Beispiel kommt gleich.
Top
#9
Beispiel.
Hab das ganze mal "zerstückelt".

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.


Angehängte Dateien
.xlsm   Beispiel.xlsm (Größe: 43,38 KB / Downloads: 5)
Top
#10
Hallo,

so geht Dein Find:


Code:
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.


zum Beispiel für das hier:

Code:
Spaltenabgleich.Cells(1, 4) = "Neue NW Tabelle"

i3 = 2
i2 = 1

For i = 1 To AnzahlSpalten

Spaltenabgleich.Cells(i3, 4) = NWDatenSheet.Cells(1, i2)
i2 = i2 + 1
i3 = i3 + 1

Next


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
Gruß Atilla
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste