Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
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

Mehrere Findnext Methoden in einer Routine Hilfe

Mehrere Findnext Methoden in einer Routine Hilfe
20.02.2015 20:02:31
Daniel
Hallo liebe Leute,
ich habe folgendes Problem:
Ich suche in einer ersten Tabelle nach dem Auftragnehmer.
Ist dieser gefunden soll der Wert 4 Spalten weiter neben der gefunden Zelle
gespeichert werden. Dies ist die Netzplannummer
Anschließend soll Tabelle2 durchsucht werden nach dieser Netzplannummer.
Wird der Wert gefunden so soll der Auftragnehmer in einer Spalte eingetragen werden.
Kann mir jemand helfen ich kriegs nich hin.
Dim breite As String
Dim zahl As String
Dim marke As String
Dim tabellenblatt As String
Dim counter As Integer
Dim A As Range
Dim AnzahlZeilen As Integer
Dim counter_suchobjekt As Integer
Dim AnzahlSuchbegriff_Doku As Integer
Dim netzplandummy As String
Dim rng As Range
Dim rng1 As Range
Dim anzahlnetzplannr As Integer
counter_suchobjekt = "1"
Sheets("Suchobjekte").Select
AnzahlSuchbegriff_Doku = Range("A1").End(xlDown).Row
Sheets("Projektauswertung").Select
AnzahlZeilen = Range("B1").End(xlDown).Row
Sheets("Suchobjekte").Cells(1, 18).Value = "AnzahlZeilen"
Sheets("Suchobjekte").Cells(2, 18).Value = AnzahlZeilen
Sheets("Suchobjekte").Cells(1, 19).Value = "AnzahlSuchbegriff_Doku"
Sheets("Suchobjekte").Cells(2, 19).Value = AnzahlSuchbegriff_Doku
Sheets("Suchobjekte").Cells(1, 20) = "Suchobjekt"
Sheets("Suchobjekte").Cells(2, 20) = Sheets("Suchobjekte").Cells(counter_suchobjekt + 1, 1).Value
counter = "1"
zahl = "0"
'marke = AnzahlZeilen - 1
'marke = "10000"
Sheets("Projektauswertung").Select
'counter+suchobjekt +1 sollte stehen , da der erste Suchwert im Sheet Suchobjekte in Zeile 2 steht
marke = Application.WorksheetFunction.CountIf(Columns(3), Sheets("Suchobjekte").Cells(counter_suchobjekt + 1, 1).Value)
'Sheets("Suchobjekte").Cells(1, 12).Value = "marke"
'Sheets("Suchobjekte").Cells(2 + counter, 12).Value = marke
While counter_suchobjekt AnzahlSuchbegriff_Doku 'es wird solange gesucht solange counter_suchobjekt ungleich Anzahl an Suchbegriffen im Sheet Zahlungsziele ist
'Sheets("Suchobjekte").Cells(1 + counter + 1, 8).Value = marke
'Sheets("Suchobjekte").Cells(1 + counter_suchobjekt, 7).Value = Sheets("Suchobjekte").Cells(counter_suchobjekt, 1).Value
tabellenblatt = Sheets("Suchobjekte").Cells(counter_suchobjekt + 1, 1).Value ' es wird mit einem dynamischen Tabellenblatt welches die Namen der PMs enthält gearbeitet
If marke = "0" Then GoTo Line14 'Wenn es keine Suchbegriffe gibt wird abgebrochen
'Hier werden die Spaltenköpfe eingetragen, welche Werte aufgeführt werden
'Sheets("semard").Cells(zeilenanz_projektleitung + counter, 1).Value = Sheets("Suchobjekte").Cells(counter_suchobjekt, 1).Value
'Das nächste Suchobjekt wird markiert, gesucht wird in von Spalte 1 bis Anzahlzeilen in Spalte 21
Sheets("Projektauswertung").Select 'Sheet Zahlungsziele wird markiert
'counter+suchobjekt +1 sollte stehen , da der erste Suchwert im Sheet Suchobjekte in Zeile 2 steht
'Gesucht wird im Sheet Projektauswertung in Spalte 3 nach dem Beriff Suchobjekt (Projektmanager)
'Sheets("Suchobjekte").Cells(1, 9).Value = Rng
zahl = "0"
Set rng = ActiveSheet.Range(Cells(1, 3), Cells(AnzahlZeilen, 3)).Find(What:=Sheets("Suchobjekte").Cells(counter_suchobjekt + 1, 1).Value, SearchDirection:=xlNext)
While zahl marke
Sheets("Projektauswertung").Select
Set rng = ActiveSheet.Range(Cells(1, 3), Cells(AnzahlZeilen, 3)).FindNext(rng)
'netzplandummy = Sheets("Projektauswertung").Cells(rng.Row, rng.Column + 6).Value
'Sheets(tabellenblatt).Cells(1 + zahl, 1).Value = netzplandummy
Sheets(tabellenblatt).Cells(1 + zahl, 12).Value = rng.Row
Sheets(tabellenblatt).Cells(1 + zahl, 13).Value = rng.Column
zahl = zahl + 1
counter = counter + 1
'
Sheets("ZIBAHUH61_Zahlungsziele").Select
Dim marke1 As String
Dim zahl1 As Integer
Dim AnzahlZeilen1 As Integer
AnzahlZeilen1 = Range("B1").End(xlDown).Row
marke1 = Range("A1").End(xlDown).Row
Set rng1 = ActiveSheet.Range(Cells(1, 5), Cells(AnzahlZeilen1, 5)).Find(What:=Sheets("Projektauswertung").Cells(rng.Row, rng.Column + 6).Value, SearchDirection:=xlNext)
zahl1 = "0"
'Suche nach dem nächsten Suchbegriff in Spalte 5
While zahl1 marke1
Set rng1 = ActiveSheet.Range(Cells(1, 5), Cells(AnzahlZeilen1, 5)).FindNext(rng1)
Sheets("ZIBAHUH61_Zahlungsziele").Cells(rng1.Row, rng1.Column + 26).Value = "semard"
zahl1 = zahl1 + 1
Wend
Wend
Line14:
'***************************************************************************************************************
'Zeigt den aktuellen Suchnamen an
Sheets("Suchobjekte").Cells(1 + counter, 6).Value = counter_suchobjekt
'Suchobjekt in diesem Fall der Projektmanager wird um 1 erhöht bzw. nach dem nächsten Namen wird gesucht
counter_suchobjekt = counter_suchobjekt + 1
counter = "0"
'Set Rng = ActiveSheet.Range(Cells(1, 21), Cells(AnzahlZeilen, 21)).FindPrevious(Rng)
Wend

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
20.02.2015 20:12:27
Daniel
Hi
dein Code ist ziemlich unübersichtlich und wirkt umständlich.
Wahrscheinlich ist es besser, wenn man das komplett neu schreibt.
Dazu solltest du etwas detaillierter beschreibst, was du machen willst, (welche Spalten sollen durchsuch werden, in welche Spalte muss was eingetragen werden) und ggf auch eine kleine Beispieldatei hochladen)
Gruß Daniel

AW: Mehrere Findnext Methoden in einer Routine Hilfe
20.02.2015 20:53:05
Luschi
Hallo Daniel,
das ist nicht nur unübersichtlich, sondern auch syntaktisch falsch. In der Vba-Hilfe
gibt es folgendes Beispiel:

With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
Der Suchbereich von 'Find' & 'FindNext' ist immer der gleiche: Worksheets(1).Range("a1:a500")
Da kann und darf es sowas wie bei Dir:
Set rng = ActiveSheet.Range(Cells(1, 3), Cells(AnzahlZeilen, 3)).FindNext(rng)
nicht geben.
Mache ein kleines Beispiel und beschreibe, was Du vorhast.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
20.02.2015 23:26:32
Daniel
Hallo
Also folgendes ich versuch es grob zu beschreiben
Gesucht wird in Spalte 3 nach "semard" im Tabellensheet "Projektauswertung"
Sheets("Projektauswertung").Select
Set rng = ActiveSheet.Range(Cells(1, 3), Cells(AnzahlZeilen, 3)).Find(What:="semard", SearchDirection:=xlNext)
Nun startet eine neue while Schleife 100 Durchläufe.
While zahl 100
Mit diesem Befehl wird immer zu nächsten Ergebniswert "semard" gesprungen.
Anzahlzeilen habe ich verwendet um das ganze dynamisch zu gestalten abhängig von der Zeilenzahl im
Tabellenblatt.
Set rng = ActiveSheet.Range(Cells(1, 3), Cells(AnzahlZeilen, 3)).FindNext(rng)
Wird der nächste Wert gefunden, so soll vom gefundenen Wert aus 6 Spalten nach rechts gegangen werden+
und dieser Wert in netzplandummy geschrieben. Darin ist nun eine Netzplannummer gespeichert.
'netzplandummy = Sheets("Projektauswertung").Cells(rng.Row, rng.Column + 6).Value
zahl = zahl + 1
counter = counter + 1
'
Nun wechseln wir in das Sheet Zahlungsziele
Sheets("ZIBAHUH61_Zahlungsziele").Select
Dort soll nun nach dem dummywert, der "netzplannummer" gesucht werden:
Set rng1 = ActiveSheet.Range(Cells(1, 5), Cells(AnzahlZeilen1, 5)).Find(What:=netzplandummy, SearchDirection:=xlNext)
zahl1 = "0"
Auch hier gibt es wieder eine while schleife die durchfahren wird bis der Wert 300 erreicht wird.
While zahl1 300
Auch hier soll jeder Wert der die Netzplannummer enthält abgeklappert werden.
Set rng1 = ActiveSheet.Range(Cells(1, 5), Cells(AnzahlZeilen1, 5)).FindNext(rng1)
Anschließend soll in der gefunden Zelle 26 Spalten nach rechtsverschoben der Wert "semard" eingetragen
werden.
Sheets("ZIBAHUH61_Zahlungsziele").Cells(rng1.Row, rng1.Column + 26).Value = "semard"
zahl1 = zahl1 + 1
Wend
Wend
Wenn aber die 2. while schleife durch ist und er zurück in die erste While schleife geht bekomme ich immer eine Fehlermeldung.

Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
20.02.2015 23:51:56
Daniel
Hi
ist es richtig, dass zu "semard" mehrere verschiedene Netzplannummern gehören können?
und wenn eine dieser Nummern in der andern Datei auftaucht, soll in dieser Zeile der Text "semard" eingetragen werden?
ich würde hier statt der Suchschleifen den Autofilter nutzen.
Du kannsst ja auch nach meheren Werten gleichzeitig filtern:
Sub test()
Dim SuchWerte As String
Dim Zelle As Range
'--- Projektnummern in Textstring sammeln
With Sheets("Projektauswertung").UsedRange
.AutoFilter Field:=3, Criteria1:="semard"
For Each Zelle In .Columns(9).SpecialCells(xlCellTypeVisible)
If Zelle.Row > 1 Then SuchWerte = SuchWerte & ";" & Zelle.Value
Next
.AutoFilter
End With
If Len(SuchWerte) = 0 Then Exit Sub
SuchWerte = Mid(SuchWerte, 2)
'--- im Zielsheet filtern und Wert einfügen
With Sheets("ZIBAHUH61_Zahlungsziele").UsedRange
.AutoFilter Field:=5, Criteria1:=Split(SuchWerte, ";"), Operator:=xlFilterValues
Intersect(.Columns(31), .Offset(1, 0)).Value = "semard"
.AutoFilter
End With
End Sub
Gruß Daniel

Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
22.02.2015 01:32:48
Daniel
Hallo,
Vielen Dank bis hier für die super Tipps :), klasse danke,
ich hab mir gerade die Lösung von dir Daniel angeschaut. Super.
Eine Frage
Im Zielsheet steht nun zur Netzplannummer noch ein wenig Text dazu.
Das heisst er kann nicht eindeutig nun die Netzplannummer ausfindig machen.
Ist es möglich den Autofilter im Zielsheet nur auf die ersten 8 Zeichen zu setzen?
'--- im Zielsheet filtern und Wert einfügen
With Sheets("ZIBAHUH61_Zahlungsziele").UsedRange
.AutoFilter Field:=5, Criteria1:=Split(SuchWerte, ";"), Operator:=xlFilterValues
Intersect(.Columns(31), .Offset(1, 0)).Value = "semard"
.AutoFilter
End With
End Sub

Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
22.02.2015 01:56:32
Daniel
Klappt bisher alles super,
nur im Zielsheet steht zur Netzplannummer noch ein wenig Text dazu
Sodass nicht eindeutig zugewiesen werden kann.
Ist es möglich den Autofilter auf einzelene Zeichen zu setzen?
Ansonsten bereite ich das Zielsheet mit dem Code vor und schneide bis auf 10 Zeichen alles ab.
Das Programm wird dadurch natürlich langsamer.
Klappt bisher alles super,
nur im Zielsheet steht zur Netzplannummer noch ein wenig Text dazu
Sodass nicht eindeutig zugewiesen werden kann.
Ist es möglich den Autofilter auf einzelene Zeichen zu setzen?
Ansonsten bereite ich das Zielsheet mit dem Code vor und schneide bis auf 10 Zeichen alles ab.
Das Programm wird dadurch natürlich langsamer.
Sheets("ZIBAHUH61_Zahlungsziele").Select
Dim c As Variant
For Each c In Range("E:E")
If Len(c.Value) > 0 Then
Cells(c.Row, 24).Value = Left(c.Value, 10)
End If

Anzeige
AW: Mehrere Findnext Methoden in einer Routine Hilfe
22.02.2015 20:29:33
Daniel
Hi
prinzipell kannst du mit dem Autofilter auch nach beginnt mit oder enthält suchen.
Ob das jetzt in Verbindung mit dem Sucharray für mehere Werte funktioniert, weiss ich nicht.
Statt deinem Zusatzmakro kannsst du auch einfach in Spalte 24 die Formel einfügen:
=Links(E1;5)
und dort dann den Autofilter anwenden.
mit der Formel geht das viel schneller als mit dem Makro.
bei bedarf kann man die Formel auch per Marko einfügen:
Sheets("ZIBAHUH61_Zahlungsziele").UsedRange.Columns(24).FormulaR1C1 = "=Left(RC5,10)"
Gruß Daniel
Gruß Daniel
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige