Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wert suchen, Zeile ausgeben

Wert suchen, Zeile ausgeben
13.05.2013 10:24:39
Horst
Liebe VBA-Gemeinde,
ein neues Problem treibt mich mal wieder ins Forum.
Ich möchte in einer Userform in zwei Textboxen Uhrzeiten eingeben. Diese sollen an einen Code übergeben werden, welche in Tabelle1, Spalte C diese Werte sucht und die Zeile ausgibt. Diese beiden Zeilenangaben will ich nutzen um alle dazwischenliegenden Zeilen zu Kopieren und in ein neues Tabellenblatt einzufügen.
Das ist mein bisheriger Code:
Private Sub CommandButton1_Click()
Dim i As Date
Dim k As Date
Dim rng As Range
Dim zeile1 As Long
Dim zeile2 As Long
i = TextBox1.Value
k = TextBox2.Value
Debug.Print i
Set rng = Worksheets("Tabelle1").Range("C:C").Find(i)
If rng Is Nothing Then
MsgBox "Wert " & i & " nicht gefunden!"
Else
zeile1 = rng.Row
End If
Debug.Print zeile1
Set rng = Worksheets("Tabelle1").Range("C:C").Find(k)
If rng Is Nothing Then
MsgBox "Wert " & k & " nicht gefunden!"
Else
zeile2 = rng.Row
End If
Die gesuchten Werte werden soweit an i und k übergeben. Ich habe noch ein Problem, dass er jedoch die Zeilenwerte ausgibt. Ich denke sehr stark, dass dies mit meiner Datumsangabe im Sheet zu tun hat! Derzeit sieht diese wie folgt aus hh:mm:ss, in der Zelle steht jedoch exemplarisch die Formel =B3+$A$1. Schreibe ich wirklich eine Zeit wie 22:56:08 und suche danach, wird diese auch gefunden. Wie schaffe ich es, meine Uhrzeit so einzurichten, dass diese auch gefunden wird? Die Zeiten werden als Datensätze so geliefert und werden von einem anderen Makro von mir bearbeitet, nicht, dass jemand denkt, dass ich diese händisch eingeben würde...
Vielen lieben Dank!
Horst.

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert suchen, Zeile ausgeben
13.05.2013 10:32:59
Horst
Oder hilft mir vielleicht auch einfach nur das kleine Wörtchen .Value weiter?

AW: Wert suchen, Zeile ausgeben
13.05.2013 10:36:09
Rudi
Hallo,
Ich habe noch ein Problem, dass er jedoch die Zeilenwerte ausgibt.
zeile1 = rng.Row
damit ermittelst du doch die Zeile, in der der Wert gefunden wird.
Gruß
Rudi

Anzeige
AW: Wert suchen, Zeile ausgeben
13.05.2013 10:41:06
Horst
Hey Rudi,
genau das tut er auch, WENN ich manuell ein Datumsformat hh:mm:ss eingebe und nach diesem suche.
Ich erhalte allerdings Datumswerte aus einer XML-Datei und formatiere diese um in ein Datum, welches auch als hh:mm:ss erscheint, jedoch wohl nicht als zu suchender Wert erkannt wird.
Klicke ich auf einer der Spalten erscheint eine Formel à la =B4+$A$1. Wie kann ich also nur nach dem angezeigten, zu suchenden Wert suchen? Deswegen mein Value-Gedanke...

Anzeige
Beispielmappe? owT
13.05.2013 10:43:12
Rudi

AW: Wert suchen, Zeile ausgeben
13.05.2013 10:51:06
Daniel
Hi
kommt jetzt darauf an, was tatsächlich in den Zellen steht:
- Text, der wie Datum aussieht
- Datum + Uhrzeit, aber Zahlenformat hh:mm:ss
- Uhrzeit
man muss wissen, daß Datum-Uhrzeit im prinzp auch nur normale Zahlen sind, wobei das Datum durch die Ganzahlen und die Uhrzeit durch die Nachkommastellen dargestellt werden.
mit .FIND nach nach Datum/Uhrzeit zu suchen ist nicht ganz leicht, weil hier die Problematiken Echter Wert vs Formatierte Darstellung in Deutscher oder Englischer Schreibweise sich zu einem komplexen Logikknäul verwirren.
wenn echte Datums- oder Zeitwerte in den Zellen stehen, dann ist es besser, den Textwert aus der Textbox in die entsprechende Double-Zahl zu wandlen und in der Exceltabelle die Zeilennummer mit Worksheetfunction.Match (entspricht der Vergleichs-Funktion) zu ermitteln.
das hätte gegenüber .FIND auch den Vorteil, daß auch bei nicht exakter Eingabe ein Wert gefunden wird (in dem Fall dann der nächstkleinere).
dim i as double
dim Zeile1 as long
i = CDbl(Cdate(Textbox1.Text))
On Error Resume next
Zeile1 = Worksheetfunction.Match(i, Worksheets("Tabelle1").Range("C:C"), 0)
On Error Goto 0
If Zeile1 = 0 then
Msgbox Textbox1.Text & " nicht gefunden."
Else
Debug.Print Zeile1
end if
gruß Daniel

Anzeige
AW: Wert suchen, Zeile ausgeben
13.05.2013 10:59:27
Horst
Hallo Daniel, bei dir besteht leider das gleiche Problem.
Hier der Link: https://www.herber.de/bbs/user/85306.xlsx
Die Werte werden wie in Spalte A geliefert und dann mit ein bisschen hin und her geschiebe zu der Formatierung in Spalte C.

Anzeige
AW: Wert suchen, Zeile ausgeben
13.05.2013 11:16:04
Daniel
Hi
naja wie ich vermutet habe, in Spalte C steht nicht nur die Uhrzeit, sondern Datum+Uhrzeit.
Aufgrund der Formatierung wird nur die Uhrzeit angezeigt, aber das geht der Suchfunktion mit Match mal meilenweit am Arsch vorbei, daher musst du nach Datum+Uhrzeit suchen:
so müsste es dann funktionieren:
i = CDBl(CDate(Textbox1.Text)) + Sheets("Tabelle1").Range(A1).Value
Zeile1 = Worksheetfunction.Match(i, Sheets("Tabelle1").Columns(3), 0)

wenn du mit FIND suchen willst, dann geht das in deinm Fall auch wenn du in Spalte A suchst, weil in Spalte A Texte stehen und keine Zeitwerte.
Die Texte kann man mit den Textboxtexten vergleichen.
set rng = Sheets("Tabelle1").Columns(1).Find(what:=Textbox1.Text, LookAt:=xlpart)
if rng is Nothing then
msgbox Textbox1.Text & " nicht gefunden"
Else
Zeile1 = rng.Row
End if 
gruß Daniel

Anzeige
AW: Wert suchen, Zeile ausgeben
13.05.2013 13:53:32
Horst
Vielen lieben Dank Daniel! Es löppt! Ich habe mich für die zweite Variante entschieden.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Wert suchen und Zeile ausgeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei und gehe in den VBA-Editor (ALT + F11).

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" -> "Einfügen" -> "Modul".

  3. Kopiere den folgenden VBA-Code in das Modul:

    Private Sub CommandButton1_Click()
       Dim i As Date
       Dim k As Date
       Dim rng As Range
       Dim zeile1 As Long
       Dim zeile2 As Long
    
       i = TextBox1.Value
       k = TextBox2.Value
    
       ' Suche nach der ersten Zeit
       Set rng = Worksheets("Tabelle1").Range("C:C").Find(i)
       If rng Is Nothing Then
           MsgBox "Wert " & i & " nicht gefunden!"
       Else
           zeile1 = rng.Row
       End If
    
       ' Suche nach der zweiten Zeit
       Set rng = Worksheets("Tabelle1").Range("C:C").Find(k)
       If rng Is Nothing Then
           MsgBox "Wert " & k & " nicht gefunden!"
       Else
           zeile2 = rng.Row
       End If
    
       ' Hier kannst du den Code für das Kopieren der Zeilen hinzufügen
    End Sub
  4. Überarbeite den Code, falls die Zeiten nicht als echte Werte erkannt werden. Du kannst CDBL und CDate verwenden, um sicherzustellen, dass die Werte korrekt interpretiert werden:

    Dim i As Double
    i = CDbl(CDate(TextBox1.Text)) + Worksheets("Tabelle1").Range("A1").Value
  5. Führe den Code aus, um die Zeilen zwischen zwei Uhrzeiten zu kopieren.


Häufige Fehler und Lösungen

  • Fehler: Wert nicht gefunden: Wenn die gesuchte Uhrzeit nicht gefunden wird, könnte es daran liegen, dass die Zelle ein Datum + Uhrzeit enthält, aber nur die Uhrzeit angezeigt wird. Stelle sicher, dass du nach dem gesamten Datum suchst.

  • Lösung: Erweitere den Suchbereich, um auch das Datum zu berücksichtigen. Benutze die Match-Funktion, um nach dem exakten Datum + Uhrzeit zu suchen.


Alternative Methoden

  1. Verwendung von WorksheetFunction.Match: Diese Methode ist nützlich, um den Index einer Zeile zu ermitteln, auch wenn der exakte Wert nicht eingegeben wird. Beispiel:

    zeile1 = WorksheetFunction.Match(i, Worksheets("Tabelle1").Range("C:C"), 0)
  2. Suchen in einer anderen Spalte: Du kannst auch nach Textwerten in Spalte A suchen, wenn die Uhrzeiten dort als Text gespeichert sind.

    Set rng = Worksheets("Tabelle1").Columns(1).Find(TextBox1.Text, LookAt:=xlPart)

Praktische Beispiele

  • Beispiel 1: Uhrzeit 22:56:08 in TextBox1 und 23:30:00 in TextBox2 eingeben. Der Code sucht in Spalte C und gibt die Zeilen zurück, in denen diese Werte stehen.

  • Beispiel 2: Suche nach einem Textwert in Spalte A, während du den Wert in der TextBox als Teil des Textes angibst.


Tipps für Profis

  • Verwende Debug.Print: Nutze Debug.Print, um den Wert der Variablen während der Ausführung zu überprüfen. Das hilft dir, mögliche Fehlerquellen zu identifizieren.

  • Optimierung der Suche: Überlege, ob du die Suche auf einen bestimmten Bereich (z.B. Range("C1:C100")) einschränken kannst, um die Performance zu verbessern.

  • Verwendung von On Error Resume Next: Diese Zeile hilft dir, den Code fortzusetzen, selbst wenn ein Fehler auftritt, insbesondere bei der Verwendung von Match.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Wert gefunden wird?
Achte darauf, dass die Formatierung der Werte in den Zellen und in den Textboxen übereinstimmt. Verwende CDate, um sicherzustellen, dass Datumswerte korrekt interpretiert werden.

2. Was ist der Unterschied zwischen .Find und Match?
.Find sucht nach einem Wert in einem bestimmten Bereich, während Match den Index eines Wertes in einer Reihe von Werten zurückgibt. Letzteres ist nützlich, wenn du die Position eines Wertes benötigst, um weitere Berechnungen durchzuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige