Herbers Excel-Forum - das Archiv
Find-Methode gibt zweiten Wert
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?
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
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
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
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