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

Frage zu Range.Find

Frage zu Range.Find
01.04.2020 14:14:12
Barbara
Hallo
Frage zu Range.Find
B3:B6="abc"
In folgendem Beispiel suche ich nach der nächsten freien Zelle nach einer bestimmten Zelle innerhalb Spalte B.
Warum ist das Ergebnis c nicht B15, sondern B1?
Sub Finden()
Dim a, b, c
With ActiveSheet
.Columns("B").Clear
.Range("B3:B6").Value = "abc"
a = .Columns("B").Find(What:="", After:=Range("B3")).Address
'a="$B$7" ist OK
b = .Columns("B").Find(What:="", After:=Range("B8")).Address
'b="$B$9" ist OK
c = .Columns("B").Find(What:="", After:=Range("B14")).Address
'c="$B$1" Warum nicht B15 ?
End With
End Sub

LG

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu Range.Find
01.04.2020 15:57:19
Daniel
Hi
Excel und VBA arbeiten häufig nicht mit dem gesamten Zellbereich des Tabellenblatts, sondern nur mit der UsedRang, dass ist der Zellbereich, in dem sich tatsächlich Inhalte (Werte, Formeln, Formatierungen) befinden.
Es wäre also möglich, dass B15 schon außerhalb der UsedRange liegt.
Schreibe mal in C16 einen Wert und probiere es nochmal. Wenn B15 jetzt gefunden wird, liegt es daran.
AW: Frage zu Range.Find
01.04.2020 16:53:32
Barbara
OK, seltsam.
Bei folgendem Code kommr B1 raus, wenn ich ihn in einer unbefleckten neuen Datei ausführe.

Sub Finden()
With ActiveSheet
.Columns("B").Clear
.Range("B3:B6").Value = "abc"
.Range("B13:B16").Value = "abc"
.Columns("B").Find(What:="", After:=.Range("B2")).Select
End With
End Sub
Da müsste doch die die erste freie Zelle nach dem Block gefunden werden. Und die liegt sicher im UsedRange.
LG
Anzeige
AW: Frage zu Range.Find
01.04.2020 19:31:56
Firmus
Hi Barbara,
was usedRange ist bestimmt Excel.
Deine Beschreibung war nachvollziehbar. active Zelle bleibt auf B1 stehen.
Ich habe als 1. und 2. Zeile eingefügt,

anzZe = ActiveSheet.UsedRange.Rows.Count
anzSP = ActiveSheet.UsedRange.Columns.Count

1. Test
Makro laufen lassen, anzZe und anzSP im Direktfenster anzeigen
Ergebnis:
Anzeige anzZe = 1, anzSP = 1
active Zelle bleibt auf B1 stehen
2. Test
In die Zellen A1:A3 einen '.' eingesetzt.
Erneuter Test:
1. anzZe = 14, anzSP = 2
2. Test durchlaufen lassen,
Ergebnis: active Zelle bleibt auf B7 stehen (wie erwartet, denn das ist die erste leere Zelle)
3. Test
Selbst wenn ich die Punkte in A1:A3 wieder lösche,
- reagiert xls erneut mit Anzze=1 und AnzSP=1,
- bleibt nach dem Makro die aktive Zelle wieder auf B1 stehen.
Vllt hilft dir das weiter,
Gruß
Firmus
Anzeige
AW: Frage zu Range.Find
01.04.2020 19:56:16
Barbara
Hi Firmus,
ich verstehe nicht, was Du damit sagen willst, und in welcher Weise mir das weiterhelfen könnte.
Findest Du nicht auch, dass Range.find in meinem Beispiel unerwartete Ergebnisse liefert?
LGB
AW: Frage zu Range.Find
01.04.2020 22:14:45
Firmus
Hi Barbara,
es gibt m. E. hier zwei Aspekte.
1. Das Verhalten das Excel in deinem Code zeigt ist irritierend, genau betrachtet sehe ich als
als Fehler in der Funktionalität an.
2. Du bist auf der Suche nach einer Lösung. Mit dem Eintragen der Punkte sieht du einen Bypass.
(man kann sagen um den Fehler herum programmiert).
Ob dieser Ansatz dir in deiner Aufgabe weiterhilft, das kann ich nicht beurteilen.
Sicher scheint mir aber, dass der Fehler - wenn er überhaupt als solcher angesehen wird - nicht
sehr schnell behoben wird.
Gruß,
Firmus
Anzeige
AW: Frage zu Range.Find
01.04.2020 22:28:43
Barbara
OK, Du siehst das als Fehler. Oder doch nicht? Keine Beschreibung in der Hilfe erklärt das. Seltsam nur, dass ich von diesem Fehler noch nie was gelesen habe.
Meine Aufgabenstellung ist Folgende:
Ich soll eine Wert in die Zelle B5 oder die erste freie Zelle darunter schreiben. Deshalb suche ich die erste freie Zelle, beginnend bei B5. Dafür bietet sich Range.Find als Lösung ohne Schleifenkonstruktion an, dachte ich. Ich finde, Bestimmen der ersten freien Zelle ist eine Standardsituation.
AW: Frage zu Range.Find
02.04.2020 14:09:31
Firmus
Hi Barbara,
die Diskussion ist eher philosophisch.
Software wird nie fehlerfrei sein, sondern nur immer besser benutzbar - wenn Korrekturen gemacht werden.
Doku zu Software deckt nie alle Konstellationen ab, sondern nur den Mainstream und vllt. ein bisschen mehr.
Die beschriebenen Symptome fallen einfach raus aus dem Doku-Umfang.
Deshalb kann ich es nicht als "das ist ein Bug" bezeichnen, sondern nur als "nach der allgemeinen Erwartung würde man das als Bug betrachten".
Streit zwischen Support-Team und Entwickler-Team: It's not a bug, it's a feature.
Und das gilt so lange bis der verantwortliche SW-Produktmanager BUG oder Feature sagt.
Bei Bug: Software nachbessern.
Bei Feature: Doku nachbessern.
Mehr kann ich dazu nicht mehr beitragen, und obiges kommt aus jahrelanger Erfahrung in beiden Bereichen - Support und Development.
Gruß,
Firmus
Anzeige
AW: Frage zu Range.Find
01.04.2020 23:53:10
GerdL
Moin Barbara,
den Grund hat dir Daniel schon genannt. Eine Alternative:
Sub test()
Dim Zeile As Long
If IsEmpty(Range("B5")) Then
Zeile = 5
ElseIf IsEmpty(Range("B6")) Then
Zeile = 6
Else
Zeile = Range("B5").End(xlDown).Row
End If
MsgBox Zeile
End Sub

Gruß Gerd
AW: Frage zu Range.Find
02.04.2020 00:22:55
Barbara
Danke Gerd, das ist mir bekannt. Sicher, so geht es auch. Besser gesagt, so geht es.
Daniel hat mE keinen Grund genannt.
Dass das mit der Festlegung des UsedRange in einer konkreten Situation zusammenhängt, und diese allein dem Programm Excel überlassen sei, und dass dieses daraus nicht nachvollziehbare Verhalten von Range.Find nicht als Fehler gesehen werden muss, ist für mich keine Benennung eines Grundes.
Oder vielleicht habe ich Dich jetzt missverstanden.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige