Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Welche Schleife ist die richtige

Welche Schleife ist die richtige
11.10.2016 15:45:16
Florian
Hallo liebes Forum,
jetzt rächt es sich, dass ich nie richtig VBA gelernt habe :-).
Bisher bin ich mit der Suche nach Programmschnipseln und dem Anpassen immer recht gut zurechtgekommen.
Nun benötige ich aber bitte Hilfe, da alles suchen aktuell nix hilft.
Ich benötige eine Schleife, aber wie?
Im Blatt "SUCHE" sind in Spalte O ab Zeile 4 abwärts verschiedene Matnr. (immer unterschiedliche Anzahl.
Nun möchte ich gerne, dass alle Matnr. in dem Blatt "Lagerbestand" gesucht werden und dann die entsprechenden Suchergebnisse als komplette Zeile in dem Blatt "help1" ausgegeben werden.
So sieht es ohne Schleife bisher (laienhaft) aus:
Sub findeStoffe1bulk()
Sheets("SUCHE").Select
Application.ScreenUpdating = False
Dim rng As Range
Dim Matnr As Long
Dim sFirstAdress As String
Matnr = Worksheets("SUCHE").Range("O4")
Set rng = Worksheets("Lagerbestand").Range("B:B").Find(Matnr)
If rng Is Nothing Then
Else
sfirstaddress = rng.Address
Do
rng.EntireRow.Copy
Worksheets("help1").Cells(Rows.Count, "A").End(xlUp) _
.Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Set rng = Worksheets("Lagerbestand").Range("B:B").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sfirstaddress
End If
Sheets("help1").Select
Range("B1").Select
Application.ScreenUpdating = True
End Sub
Sub findeStoffe2bulk()
Sheets("SUCHE").Select
Application.ScreenUpdating = False
Dim rng As Range
Dim Matnr As Long
Dim sFirstAdress As String
Matnr = Worksheets("SUCHE").Range("O5")
Set rng = Worksheets("Lagerbestand").Range("B:B").Find(Matnr)
If rng Is Nothing Then
Else
sfirstaddress = rng.Address
Do
rng.EntireRow.Copy
Worksheets("help1").Cells(Rows.Count, "A").End(xlUp) _
.Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Set rng = Worksheets("Lagerbestand").Range("B:B").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sfirstaddress
End If
Sheets("help1").Select
Range("B1").Select
Application.ScreenUpdating = True
End Sub
Sub findeStoffe3bulk()
Sheets("SUCHE").Select
Application.ScreenUpdating = False
Dim rng As Range
Dim Matnr As Long
Dim sFirstAdress As String
Matnr = Worksheets("SUCHE").Range("O6")
Set rng = Worksheets("Lagerbestand").Range("B:B").Find(Matnr)
If rng Is Nothing Then
Else
sfirstaddress = rng.Address
Do
rng.EntireRow.Copy
Worksheets("help1").Cells(Rows.Count, "A").End(xlUp) _
.Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Set rng = Worksheets("Lagerbestand").Range("B:B").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sfirstaddress
End If
Sheets("help1").Select
Range("B1").Select
Application.ScreenUpdating = True
End Sub

etc.
Wer kann hier bitte helfen?
Vielen Dank und Grüße
Florian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
11.10.2016 16:32:31
Michael
Hi Florian,
es wäre nett, wenn Du kurz eine abgespeckte, anonymisierte Beispieldatei erstellst und hochlädst: das spart mir die Arbeit, es selbst zu machen und ich kann mich auf die Lösung des Problems konzentrieren.
Es gibt mehrere denkbare Lösungsansätze, wobei die Entscheidung für einen bestimmten davon abhängt, wie viele Daten in Suche!O4:Ox stehen und noch viel mehr, wie viele im Lagerbestand vorhanden sind.
Sobald es um eine gewisse, größere Datenmenge geht, würde ich die "Standardschleife" mit .find nämlich rauswerfen und ein sogenanntes "Dictionary" verwenden. Aber dazu später, falls nötig.
Schöne Grüße,
Michael
Anzeige
AW: Beispieldatei?
11.10.2016 17:46:20
Florian
Hallo Michael,
vielen Dank für die Hilfe.
Im Anhang eine Bsp Datei
Es geht um ca. 3-10 zu suchende Einträge in Spalte O
Im Lagerbestand sind etwa 4000 Zeilen mit Einträgen
Hierhin habe ich die Datei geladen:
https://www.herber.de/bbs/user/108718.xlsm
Danke
Florian
AW: Beispieldatei?
11.10.2016 18:37:34
Piet
Hallo Florian,
ich habe deine Beispieldatei geladen, das Makro in Modul1 funktioniert doch sehr gut. Ich kann auch
keinen Unterschied in den drei Makro Varianten sehen. (vielleicht habe ich es auch übersehen)
Anbei ein überarbeitetes Makro von mir. Ich nehme an du willst alle Suchbegriffe auflisten, nicht nur einen.
Das geht über eine zusaetzliche For Next Schleife für den Suchbegriff. Schau es dir bitte einmal an.
mfg Piet
'11.10.2016   Piet   für Herber Forum
'Welche Schleife ist die richtige
Sub findeStoffe1bulk()
Sheets("SUCHE").Select
Application.ScreenUpdating = False
Dim rng As Range
Dim Matnr As Long
Dim LaZell As Integer
Dim sFirstAdress As String
'letzte Zelle im Suchbereich
LaZell = Worksheets("SUCHE").Range("O100").End(xlUp).Row
'Schleife um ganzen Suchbereich zu suchen
For k = 4 To LaZell
Matnr = Worksheets("SUCHE").Cells(k, "O")
Set rng = Worksheets("Lagerbestand").Range("B:B").Find(Matnr)
If Not rng Is Nothing Then
sfirstaddress = rng.Address
Do
rng.EntireRow.Copy
Worksheets("help1").Cells(Rows.Count, "A").End(xlUp) _
.Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
Set rng = Worksheets("Lagerbestand").Range("B:B").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sfirstaddress
End If
Next k
Sheets("help1").Select
Range("B1").Select
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Beispieldatei?
12.10.2016 09:32:28
Florian
Hallo Piet,
vielen herzlichen Dank!
Funktioniert super und macht nun genau was es soll
Grüße
Florian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige