Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: nach Uhrzeit suchen...

nach Uhrzeit suchen...
24.01.2016 19:40:52
Björn
Hallo,
ich habe eine Exceltabelle mit 4 gefüllten Spalten. Spalte A beinhaltet die Benennung einer bestimmten Einheit. In Spalte B sind Vorgänge der jeweiligen Einheit aufgelistet. In Spalte C und Spalte D sind die Start- bzw. Endzeiten der Vorgänge zu finden. Das Format dd.mm.yyy hh:mm:ss .
Ich möchte gerne den frühsten und spätesten Termin aus den Vorgängen einer bestimmten Einheit ermitteln. Die Ausgabe soll in einer msgbox erfolgen.
Tabellenlayout:
Einheit_1_____VRG_1______02.01.2016____11:00:23
Einheit_1_____VRG_2______02.01.2016____10:45:56
Einheit_1_____VRG_3______03.01.2016____08:12:00
Einheit_2_____VRG_1______...
...
...
Ausgabe über msgbox:
Startzeit: dd.mm.yyyy hh:mm:ss
Endzeit: dd.mm.yyyy hh:mm:ss
Die Bezeichnung der Einheit muss in einer msgbox eingegeben werden. Die Ausgabe der gesuchten Daten erfolgt in einer separaten msgbox.
Mein Makro schreibt leider nur die Anfangszeit des ersten VRG´s und die Endzeit des letzten VRG´s einer von mit definierten Einheit. Das Makro sucht nicht nach dem frühesten und spätesten Termin.
Mein Ziel war, die Start-/Endzeiten einer Einheit in einem Array zu sammeln und über den Befehl array.small herauszufiltern. Leider bekomme ich diese Variante nicht umgesetzt...
Kann mir jemand einen Tipp geben? Das würde mit sehr weiterhelfen.
Viele Grüße.

Sub Laufzeiten()
Dim es As Date
Dim ll As Date
Dim Einheit%
Dim dat As Date
' Tabellenlänge ermitteln
Z = 2
Do While Cells(Z, 1)  ""
Z = Z + 1
Loop
fz = InputBox(prompt:="Bitte die Einheit eingeben ", Title:="Einheit ")
' Startzeit in Tabelle suchen
For r = 2 To Z
If Cells(r, 1) = Einheit Then
es = Cells(r, 3)
Exit For
End If
Next r
' Endzeit in Tabelle suchen
For s = 2 To Z
If Cells(s, 1) = Einheit Then
ll = Cells(s, 4)
End If
Next s
' Start-/Endzeit susgeben
MsgBox prompt:="   Startzeit " & es & Chr(10) & Chr(10) & "   Endzeit: " & ll, Buttons:= _
vbInformation + vbSystemModal, Title:="Start-/Endzeiten. " & Einheit
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nach Uhrzeit suchen...
24.01.2016 20:01:36
Daniel
Hi
wenn du dir das Programmieren einfach machen willst, dann sortierst du die ganze Liste nach Einheit (A), Datum (C) und Uhrzeit (D).
Dann ist der früheste Termin in einer Einheit der erste und der späteste der letzte und du kannst einfach danach suchen.
gruß Daniel

AW: nach Uhrzeit suchen...
24.01.2016 20:16:59
Björn
Die Datei wird zentral abgelegt und von mehreren Leuten angefasst.
Ich möchte die Tabelle mit einer externen Auswertedatei öffnen und dann die Start- Endzeiten auslesen.
Deine Variante ist aus Programmiersicht einfacher, erzeugt aber einen erhöhten Pflegeaufwand hinsichtlich der Sortierung etc.
Die Kollegen werden die Tabelle sicherlich NICHT entsprechend aufbereiten, das kann man nicht verlangen bzw. würde nicht funktionieren ;)

Anzeige
AW: nach Uhrzeit suchen...
24.01.2016 20:33:18
Daniel
HI
das müssen die Kollegen auch nicht tun.
das machst du in deinem Makro.
da du die Datei sowieso mit einer externen Datei öffnen und auswerten willst, kannst du ja mit der Datei anstellen was du willst, du solltest sie halt schreibgeschützt öffnen und auf jeden Fall dann ohne Speichern schließen.
oder noch besser, du kopierst einfach nur die benötigten Inhalte in deine Auswertedatei und bearbeitest sie dann dort.
Gruß Daniel

Anzeige
kleiner Stupser
24.01.2016 20:57:11
Michael
Hi zusammen,
anbei ein simpler Entwurf mit Hilfsspalte und ohne VBA: https://www.herber.de/bbs/user/103001.xls
Daniel hat natürlich völlig Recht: Originaldatei öffnen, Daten am besten Kopieren, Datei schließen und dann so viel damit arbeiten, wie Du willst.
In die Beispieldatei kannst Du die Daten einfach reinkopieren, und wenn Du die Formeln in der Hilfsspalte nach unten ziehst, bekommst Du die Ergebnisse nach Eingabe des Begriffs in H1 sofort angezeigt.
Ich persönlich mag MsgBoxen in solchen Fällen eigentlich weniger, weil es ein Bedienungsschritt mehr ist; außerdem kann man so die Ausgabe in Zellen bei Bedarf gleich weiterverarbeiten, z.B. kopieren.
Allerdings:
1. wer will schon *einzelne* Werte händisch eingeben und ansehen? Wäre nicht eine Ausgabe in Listenform mit einer Zeile pro Begriff und von..bis ne Sache?
2. wenn wirklich nur jeweils *ein* Wert interessant ist, quasi als Momentaufnahme eines bestimmten Vorgangs, würde ich eher "datenbankmäßig" denken, also etwa mit einer Art SQL-Zugriff, bei dem alle Bedingungen gleich im Statement formuliert sind.
Schöne Grüße,
Michael

Anzeige
AW: kleiner Stupser - Nachtrag
25.01.2016 05:56:29
Michael
Nochmal zu 2. aus dem vorhergehenden post:
Die grundlegende Frage ist, wie aktuell die ausgeworfene Info sein muß.
Wenn Deine Kollegen "irgendwo" Eingaben machen und die Datei nicht gleich speichern, ist die Änderung bis zur nächsten in Excel definierten "automatischen Speicherung" alle x Minuten nur im Arbeitsspeicher des betreffenden Rechners, nicht jedoch in der Datei vorhanden.
Das ist eine grundsätzliche Geschichte, die man in Excel so nicht wirklich "sauber" lösen kann.
*Wenn* das wirklich hochaktuell sein müßte, könnte man in der Datendatei noch ein Makro anbringen, das nach erfolgten Eingaben immer gleich speichert, aber eine echte Datenbanklösung wäre dann das Mittel der Wahl, und wenn's SQlite ist...
Gruß,
Michael
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Nach Uhrzeit in Excel suchen und früheste/späteste Termine ermitteln


Schritt-für-Schritt-Anleitung

Um die früheste und späteste Uhrzeit in einer Excel-Tabelle zu ermitteln, kannst du das folgende VBA-Makro verwenden. Es durchsucht die Spalten nach den angegebenen Start- und Endzeiten für eine bestimmte Einheit.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub Laufzeiten()
    Dim es As Date
    Dim ll As Date
    Dim Einheit As String
    Dim Z As Long
    Dim r As Long
    Dim s As Long

    ' Tabellenlänge ermitteln
    Z = 2
    Do While Cells(Z, 1) <> ""
        Z = Z + 1
    Loop

    Einheit = InputBox(prompt:="Bitte die Einheit eingeben ", Title:="Einheit ")

    ' Startzeit in Tabelle suchen
    For r = 2 To Z
        If Cells(r, 1) = Einheit Then
            If es = 0 Or Cells(r, 3) < es Then
                es = Cells(r, 3)
            End If
        End If
    Next r

    ' Endzeit in Tabelle suchen
    For s = 2 To Z
        If Cells(s, 1) = Einheit Then
            If Cells(s, 4) > ll Then
                ll = Cells(s, 4)
            End If
        End If
    Next s

    ' Start-/Endzeiten ausgeben
    MsgBox prompt:="   Startzeit: " & Format(es, "dd.mm.yyyy hh:mm:ss") & Chr(10) & Chr(10) & "   Endzeit: " & Format(ll, "dd.mm.yyyy hh:mm:ss"), _
    Buttons:=vbInformation + vbSystemModal, Title:="Start-/Endzeiten für " & Einheit
End Sub
  1. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Problem: Das Makro gibt nur die Startzeit des ersten Vorgangs und die Endzeit des letzten Vorgangs aus.

    • Lösung: Stelle sicher, dass du die Bedingungen im If-Befehl im zweiten Abschnitt des Codes anpasst, damit die kleinste Startzeit und die größte Endzeit ermittelt werden.
  • Problem: Die Eingabemaske für die Einheit wird nicht angezeigt.

    • Lösung: Prüfe, ob das Makro korrekt ausgeführt wird und keine Fehler im Code sind.

Alternative Methoden

Eine einfache Methode, um die früheste und späteste Uhrzeit zu ermitteln, ist das Sortieren der Daten. Du kannst die Daten in Excel nach den Spalten „Einheit“, „Startzeit“ und „Endzeit“ sortieren. Der früheste Termin ist dann der erste Eintrag in der sortierten Liste, während der späteste der letzte ist. Dies kannst du unter Daten > Sortieren durchführen.


Praktische Beispiele

Für die Tabelle mit den Einträgen:

Einheit Vorgang Startzeit Endzeit
Einheit_1 VRG_1 02.01.2016 11:00:23 02.01.2016 12:00:00
Einheit_1 VRG_2 02.01.2016 10:45:56 02.01.2016 11:30:00
Einheit_1 VRG_3 03.01.2016 08:12:00 03.01.2016 09:00:00
Einheit_2 VRG_1 03.01.2016 10:00:00 03.01.2016 11:00:00

Wenn du das Makro ausführst und „Einheit_1“ eingibst, erhältst du die früheste Startzeit als 02.01.2016 10:45:56 und die späteste Endzeit als 03.01.2016 09:00:00.


Tipps für Profis

  • Wenn du häufig mit Zeitdaten arbeitest, erwäge die Verwendung von Excel-Datenbankfunktionen oder Pivot-Tabellen, um die Analyse zu vereinfachen.
  • Du kannst auch Formeln wie MIN und MAX verwenden, um die frühesten und spätesten Zeiten direkt in den Zellen zu ermitteln.
  • Denke daran, die Daten regelmäßig zu sichern, besonders wenn mehrere Benutzer auf die Datei zugreifen.

FAQ: Häufige Fragen

1. Wie kann ich das Makro für eine andere Excel-Version anpassen? Die oben genannten Schritte sollten in den meisten Excel-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass die Benutzeroberfläche leicht variieren kann.

2. Kann ich die Ausgabe anstelle einer MsgBox in eine Zelle schreiben? Ja, anstelle der MsgBox kannst du die Ergebnisse in bestimmte Zellen schreiben, z.B. Cells(1, 6).Value = es für die Startzeit und Cells(2, 6).Value = ll für die Endzeit.

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