Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
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
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.

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

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.

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.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige