Anzeige
Archiv - Navigation
1924to1928
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

Ersten Wert in einer Spalte suchen

Ersten Wert in einer Spalte suchen
17.04.2023 18:20:23
Matthias

Die "Index-Fehler" scheinen mich jetzt zu verfolgen - was mache ich hier falsch??? :
"Laufzeitfehler 9 / Index außerhalb des gültigen Bereiches"
bei diesem Makro, das mir nur die Zeilennummer in Spalte G zurückgeben soll, in dem ein zu suchender Wert steht:

Sub Suche()
Dim Zeile1 As Long
Dim a As String
a = "0"
Sheets("xyz").Select
Zeile1 = Range("G1:G500").Find(what:=a, LookAt:=xlWhole).row
MsgBox "Die erste Zelle in Spalte G mit dem Wert 0 ist in Zeile " & Zeile1
End Sub



Von welchem Index ist hier die Rede und wieso liegt er ausserhalb des gültigen Bereiches?

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ersten Wert in einer Spalte suchen
17.04.2023 18:26:12
onur
Wenn du mal auf "Debuggen" klicken würdest, wüsstest du auch, in WELCHER Zeile der Fehler ist.


AW: Ersten Wert in einer Spalte suchen
17.04.2023 18:43:22
Matthias
Ja, Onur, das ist ein guter Hinweis! Ich habe die fehlererzeugende Zeile deshalb fett geschrieben., sorry, das habe ich nicht extra erwähnt. Hast Du auch eine Idee, was ich in dieser fett dargestellten Code-Zeile falsch mache?


AW: Ersten Wert in einer Spalte suchen
17.04.2023 18:59:29
Matthias
Sorry, falscher Hinweis von mir! Die Code-Zeile:
Zeile1 = Range("G1:G500").Find(what:=a, LookAt:=xlWhole).row
erzeugt den Fehler "Laufzeitfehler 91 / Objektvariable oder With-Blockvariable nicht festgelegt".
. Ich verstehe das trotzdem nicht. Wo ist da eine Objektvarbiale oder eine With-Blockvariable?????


Anzeige
AW: Ersten Wert in einer Spalte suchen
17.04.2023 19:09:57
onur
Das kommt daher, dass Find nix findet.
Sub Suche()
    Dim Zeile1
    Dim a As String
    a = "0"
    Sheets("tabelle1").Select
    Set Zeile1 = Range("G1:G500").Find(what:=a, LookAt:=xlWhole)
    If Not Zeile1 Is Nothing Then
        MsgBox "Die erste Zelle in Spalte G mit dem Wert 0 ist in Zeile " & Zeile1.Row
    Else
        MsgBox "NIX GEFUNDEN!"
    End If
End Sub


AW: Ersten Wert in einer Spalte suchen
17.04.2023 20:26:30
Matthias
Hallo Onur, vielen Dank für diesen Tipp! Ich bin noch zu frisch in vba, als dass ich diese "Fallen" gleich erkenne. Hinterher erscheint es dann logisch. Dennoch ist für mich noch nicht alles gelöst: Die Zellen in Spalte G sind als Währung (Tausender-Punkt, 2 Dezimalstellen und €-Zeichen formatiert). Weder bei a=45 noch bei a="45,00€" kann ich diesen Wert finden. Gibt es irgendeine Methode in vba der Find-Funktion zu sagen, welche Art von Werten gesucht werden sollen? Vielleicht hast du ja noch mal Zeit und Lust mir einen Tipp zu geben. Auch wenn nicht, vielen Dank noch mal für diesen Tipp! Gruß, Matthias


Anzeige
AW: Ersten Wert in einer Spalte suchen
17.04.2023 20:34:10
onur
Bei a=45 (ohne Gänsefüsschen) sollte es eigentlich klappen. Natürlich darf a dann NICHT als String dimensioniert sein.
Wenn nicht, poste mal die (Beispiels-) Datei.


AW: Ersten Wert in einer Spalte suchen
18.04.2023 22:24:02
Matthias
Hi Onur,
mit Dim a as Long und a =45 geht es nicht (auch nicht mit a AS Variant). Suche ich mit diesem Makro nach einem String "xyz" funktionierts (wenn a AS String deklariert wurde). Es funktioniert auch, wenn ich Spalte G komplett als Zahl formatiere. Es scheint etwas mit dem Format zu tun zu haben, das die Zahl 45 so verändert, dass Find 45,00€ nicht mehr als Zahl 45 erkennt.
Welche Datei meinst Du, die hier helfen könnte? Das Tabellenblatt oder meine Makros? Das Tabellenblatt würde noch gehen, aber die Makros sind (glaube ich) viel zu lang.


Anzeige
AW: Ersten Wert in einer Spalte suchen
18.04.2023 22:33:27
onur
WIE dui eine Zelle formatiert hast, spielt keine Rolle, wenn da z.B. sowieso nur TEXT drin ist.
Ich brauche irgend eine Datei, wo ich das, was du beschreibst, auch sehen und testen kann. EIN Blatt mit deinem M;akro reicht schon. Deine sonstigen Makros sind irrelevant.


AW: Ersten Wert in einer Spalte suchen
19.04.2023 20:12:05
Matthias
Hallo Onur,
jetzt stehe ich ziemlich blöd da: Habe aus meinem Excel-Workbook eine Testversion gemacht. 30 Tabellenblätter auf eines reduziert, sämtliche Makro entfernt - bis auf das "Suchen"-Makro. Wollte es dann vor dem Posten vorsichtshalber noch mal ausprobieren ... und ... der Wert 45 wurde plötzlich gefunden. Wieder ins Original Workbook gegangen und ausprobiert: Mit demselben Makro wird die 45 nicht gefunden. Das wirkt irgendwie total spooky, aber ich kann nichts anderes berichten. Was soll ich jetzt tun? Die Original-Datei kann und will ich hier nicht posten, es stehen zuviele persönliche Dinge drin. Die Testdatei, die ich für Dich gemacht habe, zeigt aber den Fehler nicht mehr... ??? Gibt es eine Möglichkeit Dich auch persönlich zu kontaktieren oder ist das dann gleich eine "Auftragsprogrammierung"? oder würde das gar gegen die Forums-Etikette verstoßen?
Gruß, Matthias


Anzeige
AW: Ersten Wert in einer Spalte suchen
19.04.2023 20:41:29
onur
Kopiere erstmal die 45 von der Datei, die du posten wolltest in die Zelle der Datei, wo es nicht läuft, aber 1 zu 1 - also nicht nur Werte oder so.
Mal sehen, was passiert.


AW: Ersten Wert in einer Spalte suchen
19.04.2023 20:49:33
Matthias
Onur, sorry, ich wäre Dir nicht böse, wenn Du meine Beschreibungen inzwischen als nervig empfindest, denn wahrscheinlich sind sie es für Profis wirklich. Falls Deine Geduld noch nicht am Ende ist: Mir jetzt noch etwas aufgefallen -> Die 45 (nur ein Beispielswert) ist das Ergebnis der Formel
=WENN(F84*B84=0;"";B84*F84

Wenn ich diese Formel in der Spalte G im Tabellenblatt lösche und "händisch" den Wert 45 in die Zelle (z.B.) G84 schreibe, funktioniert das Makro auch in meinem Original-Workbook und zwar unabhängig davon, ob die Zelle als Zahl oder Währung formatiert wird. Das hast Du ja auch schon vorher mal geschrieben. Ich kann sogar das ".Find(what:=Replace(a, "€", "")..." wieder 'rausnehmen und durch ".Find(what:=a....) ersetzen. Also wird ein Unterschied von der Find-Funktion gemacht, ob der gesuchte Wert das Ergebnis einer Formel ist oder einfach nur ein "nackter" Wert ist??? Kaum vorstellbar, aber ich habe im Moment noch keine andere Erklärung.
Gruß, Matthias


Anzeige
AW: Ersten Wert in einer Spalte suchen
19.04.2023 20:57:19
onur
Hat nix damit zu tun, sobald du Replace benutzt, wird Text draus.
SO formatiert man Zahlen ja auch nicht, nur mit (z.B.) Rechtsklick/Zelle formatieren/Währung.


AW: Ersten Wert in einer Spalte suchen
19.04.2023 21:21:43
Matthias
Ich habe G84 (in diesem Beispiel) mit "Rechtsklick/Zellen formatieren" formatiert. Was ich jetzt aber trotzdem immer noch herausbekommen muss:
Warum wird die 45 nicht mehr gefunden, sobald sie das Ergebnis einer Formel ist? Für das Funktionieren meiner Applikation muss in der Zelle G84 diese Formel stehen, die den Wert 45 (oder andere Werte) errechnet, daran führt kein Weg vorbei. Es erscheint mir im Moment alles recht unlogisch und ich habe das Gefühl, dass ich etwas ganz Einfaches übersehe, komme z.Zt. nur noch nicht drauf. Ich mache irgendeinen dummen Fehler. Die gesamte Applikation ist letztlich nur ein (für mich dennoch wichtiges) Hobbyprojekt, es ist der Ehrgeiz, der mich hier dazu aufruft "Gib noch nicht auf!" :-))


Anzeige
AW: Ersten Wert in einer Spalte suchen
19.04.2023 21:26:37
onur
Versuch es mit "LookIn:=xlValues"


AW: Ersten Wert in einer Spalte suchen
19.04.2023 21:30:53
onur
Mach mal das: Makrorecorder einschalten, zuerst mit STR-F was suchen - mit "Suchen in Formeln" - dann das Selbe mit "Suchen in Werten".
Dann vergleiche mal die Makros und die Ergebnisse der Suche.


AW: Ersten Wert in einer Spalte suchen
19.04.2023 23:32:48
Matthias
Wieder neue Beobachtung und danach die sehnsüchtig erwartete Lösung:
Es ist definitiv die Formatierung im Tabellenblatt, die den Suchalgorithmis .Find (bzw. seinen Programmierer) verwirrt. Formatiere ich die Zelle G84 als Zahl mit 0 Nachkommastellen funktioniert dieses Makro einwandfrei, d.h. der Wert in Variable a wird gefunden:

Sub Suchen_01()
Dim Zeile1 As Range
Dim a As Long
Sheets("Rechnung").Select
a = Range("G84").Value
'Set Zeile1 = Range("G1:G500").Find(what:=a, LookAt:=xlWhole)
Set Zeile1 = Range("G1:G500").Find(what:=Replace(a, "€", ""), LookAt:=xlWhole)
If Not Zeile1 Is Nothing Then
MsgBox "Die erste Zelle in Spalte G mit dem Wert 0 ist in Zeile " & Zeile1.row
Else
MsgBox "NIX GEFUNDEN!"
End If
End Sub

Sobald die Zelle G84 aber als Zahl mit 2 Nachkommastellen oder als Währung formatiert ist, wird der gleiche Wert in Variable nicht mehr gefunden.

Auch wenn es ein bißchen "von hinten durch die Brust ins Auge" aussieht", habe ich eeeeendlich eine annehmbare Lösung gefunden:

Sub Suchen_01()
    Dim Zeile1 As Range
    Dim a As String

    Sheets("Rechnung").Select
    a = Range("G84").Value
    Set Zeile1 = Range("G1:G500").Find(what:=a, LookAt:=xlWhole)
    'Set Zeile1 = Range("G1:G500").Find(what:=Replace(a, ",00€", ""), LookAt:=xlWhole)
    If Not Zeile1 Is Nothing Then
        MsgBox "Die erste Zelle in Spalte G mit dem Wert 0 ist in Zeile " & Zeile1.row
    Else
        MsgBox "NIX GEFUNDEN!"
    End If
End Sub
Dieses Makro funktioniert nur dann, wenn die Zellen der Spalte G im Sheet("Rechnung") so geändert werden:
=TEXT(WENN(F84*B84=0;"";B84*F84);"0,00€")
mit

=WENN(F81*B81=0;"";B81*F81)
funktioniert es NICHT mehr! Bitte auch auch DIM a As Long bzw. DIM a As String beachten!

Ich kann mit dieser umständlich anmutenden Lösung leben und bedanke mich an dieser Stelle bei Dir Onur, für Deine Gelduld und Deine Tipps, die meine Gedanken in die richtige Richtung gelenkt haben. Vielleicht findest Du noch eine bessere Lösung, ich würde mich drüber freuen!
Freundliche Grüße, Matthias


Anzeige
AW: Ersten Wert in einer Spalte suchen
19.04.2023 23:41:55
onur
Ich hab dir doch schon 21:26 Uhr eine Antwort geschrieben.


AW: Ersten Wert in einer Spalte suchen
19.04.2023 23:56:05
Matthias
OMG, habe das im Eifer des Gefechtes nicht gecheckt. Um 21:16 hast Du die Lösung eindeutig zuerst gefunden und ich hätte mir noch mal 2 Stunden sparen können ... :-(. Trotzdem gönne mir die Freude/Stolz , dass ich als Anfänger auch zu dieser Lösung gekommen bin! Onur, an dieser Stelle noch einmal ganz, ganz herzlichen Dank an Dich. Trotz vieler "Verzweiflungsattacken" hat es Riesenspaß gemacht mit Dir zusammenzuarbeiten !!!
Ganz herzlichen Gruß, Matthias


AW: Ersten Wert in einer Spalte suchen
20.04.2023 00:00:17
onur
Häääh ? Von "LookIn:=xlValues" steht doch in DEINEM Makro gar nix.


Anzeige
AW: Ersten Wert in einer Spalte suchen
19.04.2023 22:48:35
GerdL
Moin Mathias,
probier mal.
Sub Suche2()
    
    Dim Zelle As Range
    Dim a As Double
    
    a = 45
    
    Set Zelle = Sheets("tabelle1").Range("G1:G500").Find(what:=a, LookAt:=xlWhole, LookIn:=xlFormulas)
    
    If Not Zelle Is Nothing Then
        MsgBox "Die erste Zelle in Spalte G mit dem Wert " & a & " ist in Zeile " & Zelle.Row
    Else
        MsgBox "NIX GEFUNDEN!"
    End If

End Sub
Gruß Gerd


AW: Ersten Wert in einer Spalte suchen
19.04.2023 23:43:31
Matthias
Moin GerdL, danke für Deinen Hinweis. Leider funktiert es mit Dim As Double und LookIn XlFormulas auch nicht. Die Lösung steht in meinen letzten Posting. Trotzdem ganz herzlichen Dank für Deinen Vorschlag! Gruß, Matthias

Anzeige

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige