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

FindNext bei verschachtelten Finds

FindNext bei verschachtelten Finds
23.03.2009 12:42:00
Werner
VBA-Level: befriedigend
Hallo Freunde,
versuche z.Zt. ohne Erfolg einen Find-Befehl zu verschachteln, und zwar so:
Worksheet1 enthält in Spalte A Suchbegriffe, die dort mehrmals vorkommen. In Spalte B stehen weitere
Daten.
Beabsichtigt ist, mit einer Schleife - Find und FindNext - einen Suchbegriff in Worksheet1 aufzufinden und
dann den Eintrag in Spalte B der gleichen Zeile von Worksheet1 wiederum als Suchbegriff zu verwenden, diesmal für Werte, die in Spalte A einer zweiten Tabelle (Worksheet2) stehen.
Wie der Find-Befehl anzuwenden ist, weiß ich, nur hier taucht das Problem auf, dass Excel, nachdem es in der zweiten Tabelle gesucht hat, bei der Suche nach dem zweiten Vorkommen des ersten Hauptsuchbegriffs den FindNext-Befehl in der ersten großen Schleife auf den eingeschachtelten Find-Befehl
in Worksheet2 bezieht und den zuallererst gesuchten Suchbegriff "vergessen" hat.
Beispiel: In Worksheet1 suche ich in Spalte A Autos eines bestimmten Herstellers. Rechts davon steht
eine laufende Nummer, die auch in Spalte A von Worksheet2 steht. Diese laufende Nummer aus Spalte B in Worksheet1 verwende ich im untergeschachtelten Find als Suchbegriff für die Suche in Worksheet2.
Frage: Wie bringe ich Excel dazu, bei der Suche in Worksheet1 bei "FindNext" die Parameter, die ihm
zuvor durch "Find" mitgeteilt worden waren, nicht zu vergessen?
Dank f. Anregungen! Grüße Werner R.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FindNext bei verschachtelten Finds
23.03.2009 12:52:26
D.Saster
Hallo,
es kann nur eine Suche geben.
Such doch deine Daten im 2.Sheet z.B. mit VLookUp.
Ich würde aber beide Datenbereiche einfach in 2 Arrays einlesen und die per Schleife abklappern.
Ist ggfs sogar schneller als .Find.
Gruß
Dierk
Werde es mal versuchen
23.03.2009 13:09:56
Werner
Hallo Dierk,
dass es so nicht geht, habe ich mir fast schon gedacht. Werde es mal auf VLookup oder Match umprogram-
mieren.
Ein Array für tausende von Daten - in Wirklichkeit sind die Worksheets komplizierter als hier der Vereinfa-
chung halber dargestellt - , das wäre aber ein wahrhafter Jumbojet!
Vielen Dank für deine Hinweise!! Werner R.
Anzeige
AW: Werde es mal versuchen
23.03.2009 13:23:09
D.Saster
Hallo,

Ein Array für tausende von Daten - in Wirklichkeit sind die Worksheets komplizierter als hier der Vereinfachung halber dargestellt - , das wäre aber ein wahrhafter Jumbojet! 


Kein Problem. Hab schon Arrays mit mehr als 100.000 Zeilen verwendet.
Mach mal die Spalte A voller x, schreibe in A65535 ein z und lass das laufen:


Sub tttt()
Dim arr, i As Long
arr = Range("A1").CurrentRegion
For i = 1 To UBound(arr)
If arr(i, 1) = "z" Then
MsgBox i
Exit Sub
End If
Next
End Sub

Gruß
Dierk

Anzeige
AW: Werde es mal versuchen
23.03.2009 13:48:18
Luschi
Hallo Werner,
hier mal ein kleines Beispiel dazu: https://www.herber.de/bbs/user/60576.xls
Wie Du feststellen wirst, funktioniert der FindNext-Befehl nicht, wenn man mehr als einen Find-Befehl in der gleichen Routine verwendet, um in unterschiedliche Bereichen zu suchen.
Für den eigentlichen FindNext-Befehl muß man wieder den Find-Befehl verwenden, nur daß jetzt der 2. Parameter! mit angegeben wird.
gruß von Luschi
aus klein-Paris
AW: Werde es mal versuchen
23.03.2009 18:47:08
Nepumuk
Hallo,
das geht schon. Man muss nur an Stelle der FindNext-Methode die Find-Methode wieder anwenden und die zuletzt gefundene Zelle als Ausgangszelle benutzen (After).
Schreib einfach mal die Zahlen 1-10 in die erste Spalte so dass sie sie sich mehrfach wiederholen. Dann diese Tabelle kopieren (innerhalb der Mappe). Jetzt folgendes Beispiel durchsteppen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub Beispiel()
    Dim myRange1 As Range, myRange2 As Range
    Dim strAddress1 As String, strAddress2 As String
    Dim intIndex As Integer
    For intIndex = 1 To 10
        Set myRange1 = Worksheets(1).Columns(1).Find( _
            What:=intIndex, LookIn:=xlValues, _
            LookAt:=xlWhole)
        If Not myRange1 Is Nothing Then
            strAddress1 = myRange1.Address
            Do
                
                'Code für Schleife 1
                
                Set myRange2 = Worksheets(2).Columns(1).Find( _
                    What:=intIndex, LookIn:=xlValues, _
                    LookAt:=xlWhole)
                If Not myRange2 Is Nothing Then
                    strAddress2 = myRange2.Address
                    Do
                        
                        'Code für Schleife 2
                        
                        Set myRange2 = Worksheets(2).Columns(1). _
                            FindNext(myRange2)
                    Loop While Not myRange2 Is Nothing And _
                        strAddress2 <> myRange2.Address
                End If
                
                'hier kommt an Stelle von Findnext eine neue Find - Methode.
                
                Set myRange1 = Worksheets(1).Columns(1).Find( _
                    What:=intIndex, After:=myRange1, LookIn:=xlValues, _
                    LookAt:=xlWhole)
            Loop While Not myRange1 Is Nothing And _
                strAddress1 <> myRange1.Address
        End If
    Next
End Sub

Gruß
Nepumuk
Anzeige
verspäteter Dank!
26.03.2009 09:10:54
Werner
Hallo Saster, hallo Luschi, hallo Nepumuk,
mit dieser Fülle von Antworten hatte ich gar nicht gerechnet. Vielen herzlichen Dank an euch alle, leider etwas verspätet. Bei mir ist etwas dazwischen gekommen, so
dass ich erst jetzt antworten kann. Bitte um Verständnis! (Man hat leider nicht immer so viel Zeit, wie man eigentlich haben wollte und müsste, um sich solchen interessanten Fragestellungen zu widmen.)
Wie ich euren Antworten entnehme, gibt es hier offenbar mehr als eine Möglichkeit, d.h. die Wiederholung
des Find-Befehls (mit neuem Bereich ab letzter Fundstelle), die Verwendung eines Jumbo-Arrays oder auch die Lösung mit VLookup, d.h. SVerweis. Ich habe mich für mein spezielles Problem in diesem Fall für die VLookup-Lösung entschieden, doch nicht ohne die Alternativen im Hinterkopf zu behalten.
Appropo Array noch meinerseits der Hinweis, dass man ein Array, wenn man in einem solchen Fall eines verwendet, auch mit der Worksheetfunction "Transpose" füllen kann. Soll angeblich schneller gehen. Ist euch Experten wohl längst bekannt, doch für manchen VBA-Normalverbraucher wie mir ist es neu. Beispiel: Range A1:A5 aus einem Worksheet in ein Array einlesen:
Dim iData(1 To 5)
iData = Application.WorksheetFunction.Transpose(ActiveSheet.Range("A1:A5"))
(Der Hinweis stammt von den chinesischen Excel-Experten von Excel Home, Excel 360 zhao, p. 31-8).
Grüße! Werner R.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige