Herbers Excel-Forum - das Archiv

Find-Methode gibt zweiten Wert

Bild

Betrifft: Find-Methode gibt zweiten Wert
von: Thomas

Geschrieben am: 02.01.2007 15:21:03
Hallo Experten,
ich möchte mit der Find-Methode Werte finden und weiterverarbeiten.
Beispiel:
A1..A10 sind alle leer, bis auf:
A1 enthält "Anna"
A2 enthält "Berta"
A10 enthält "Cäsar"
Nun sollen A1..A10 durchforstet werden und -falls sie nicht leer sind- in der gefundenen Reihenfolge nach Spalte C kopiert werden.
Ich dachte mir das so:
Sub Finden()
Dim c
Dim z
With Range("A1:A10")
Set c = .Find("*")
If Not c Is Nothing Then
firstaddress = c.Address
z = 1
Do
Cells(z, 3) = c
Set c = .FindNext(c)
z = z + 1
Loop While c.Address <> firstaddress
End If
End With
End Sub

Das Problem ist, dass der erste gefundene Wert nicht Anna, sondern Berta ist und Anna als letztes gefunden wird.
Das Ergebnis ist also:
C1 = Berta
C2 = Cäsar
C3 = Anna
Ich hätte aber folgendes erwartet:
C1 = Anna
C2 = Berta
C3 = Cäsar.
Weiß jemand Rat, wie ich Excel dazu bringen kann, Zelle A1 als erstes zu durchsuchen, wie auch im Range-Objekt angegeben?
Bild

Betrifft: AW: Find-Methode gibt zweiten Wert
von: Josef Ehrensberger

Geschrieben am: 02.01.2007 15:46:20
Hallo Thomas!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Finden()
    Dim c As Range
    Dim z As Long
    Dim firstaddress As String
    
    With Range("A1:A10")
        
        Set c = .Find("*", after:=Range("A10"))
        
        If Not c Is Nothing Then
            firstaddress = c.Address
            z = 1
            Do
                Cells(z, 3) = c
                Set c = .FindNext(c)
                z = z + 1
            Loop While Not c Is Nothing And c.Address <> firstaddress
        End If
        
    End With
    
    Set c = Nothing
    
End Sub

'Alternative
Sub Finden2()
    On Error Resume Next
    Range("A1:A10").SpecialCells(xlCellTypeConstants, 23).Copy Range("C1")
    On Error GoTo 0
End Sub

Gruß Sepp
Bild

Betrifft: AW: Find-Methode gibt zweiten Wert
von: Thomas

Geschrieben am: 02.01.2007 16:10:04
Hallo Sepp,
vielen Dank für deine Antwort. Die "After"-Anweisung funktioniert gut!
Trotzdem komisch, warum Excel nicht in der ersten Zelle des angegebenen Range-Befehls anfängt, zu suchen...
Deine zweite Lösung sieht auch gut aus, obwohl ich nicht weiß, was die 23 bedeutet. Für mich ist aber die erste Methode besser, da ich in Wirklichkeit keine leeren Zellen habe, sondern Zellen suche, die einen bestimmten Inhalt haben.
Oder geht das damit auch? Nehmen wir also an, ich möchte nur die Zellen kopieren, die "Berta" enthalten. Kann ich das damit auch erledigen?
Vielen Dank und schönen Tag noch,
Thomas
Bild

Betrifft: AW: Find-Methode gibt zweiten Wert
von: Josef Ehrensberger

Geschrieben am: 02.01.2007 19:38:08
Hallo Thomas!
Nein, das geht mit ".SpecialCells" nicht.
Ich würde es so machen.
Sub Finden()
    Dim rng As Range, rngC As Range
    Dim strFirst As String
    
    With Range("A1:A10")
        
        Set rng = .Find("*", after:=Range("A10"))
        
        If Not rng Is Nothing Then
            
            strFirst = rng.Address
            
            Do
                
                If rngC Is Nothing Then
                    Set rngC = rng
                Else
                    Set rngC = Union(rngC, rng)
                End If
                
                Set rng = .FindNext(rng)
                
            Loop While Not rng Is Nothing And rng.Address <> strFirst
            
        End If
        
    End With
    
    If Not rngC Is Nothing Then rngC.Copy Range("C1")
    
    Set rng = Nothing
    Set rngC = Nothing
    
End Sub

Gruß Sepp
Bild

Betrifft: AW: Find-Methode gibt zweiten Wert
von: Thomas
Geschrieben am: 04.01.2007 11:15:08
Vielen Dank, sieht auch gut aus. Muss mal ausprobieren, welche Methode die schnellere ist.
Gruß,
Thomas
 Bild
Excel-Beispiele zum Thema "Find-Methode gibt zweiten Wert"
Modul in einer zweiten Arbeitsmappe löschen Den vorhergehenden Zellwert in einer zweiten Zelle zeigen
In einem zweiten Tabellenblatt vorgegebene Zeilen beschriften Zeilen eines zweiten Blattes im ersten über Drehfeld anzeigen
Tabellenzeilen in Abhängigkeit einer zweiten Tabelle einblenden Werte jeder zweiten Spalte in zwei Stufen dividieren
Zelleinträge den Werten in einer zweiten Zelle hinzuaddieren Einen Wert in einem zweiten Blatt einer Kalenderwoche zuordnen