Ako zadať v Exceli čas bez dvojbodky?

Opäť raz zaujímavý problém, ktorého riešenie pomôže viacerým z vás. Zuzana sa pýta:

V exceli často nahadzujem časy, napr. čas odchodu zamestnanca na služobnú cestu a čas návratu zamestnanca zo služobnej cesty – a odčítam časy, tak zistím, koľko hodín, času strávil zamestnanec na služobnej ceste. Moja otázka znie, ako zadávať čas bez dvojbodky, ale zároveň aby mi hodnotu zobralo ako čas.
Napr. chcem zadať 09:20, tak píšem s dvojbodkou, čo ma zdržuje, ak napíšem len 0920 nerozpozná mi formát času… skúšala som rôzne formáty bunky, evidentne nepoužívam správny … vopred ďakujem

Viacerí už tušíte, že riešení bude viacero. Kostrbatejšie riešenie je využívať pomocné stĺpce, kde sa čas zadaný bez dvojbodky prevedie na ten správny a tieto skryté stĺpce sa využijú neskôr pri výpočtoch. Lenže… Je to zbytočne komplikované. Riešenie je omnoho jednoduchšie – využijeme VBA – makro 😀

Opäť to bude krátky kód, ktorý zabezpečí, že čas zadaný napr. v tvare 125 sa automaticky prevedie na 01:25. Žiadne pomocné stĺpce, žiadne komplikované vzorce a žiadne riziko, že omylom vymažem pomocný stĺpec.

Poďme teda postupne:

  • V hárku, v ktorom potrebujem týmto spôsobom zadávať čas, kliknem pravým tlačidlom myši na uško hárka a zvolím Zobraziť kód.
  • V otvorenom okne VBA pridám (stačí CTRL+C a CTRL+V) kód, ktorý je nižšie v tomto článku.
  • Jediné, čo v kóde musíme zmeniť, je oblasť, do ktorej budeme zadávať čas. U mňa je to oblasť A3:B25. Ak potrebujete napr. čas zadávať v stĺpcoch C a D, tak A3:B25 nahradíte C:D.
  • Po kliknutí na Uložiť (alebo CTRL+S) budem vyzvaný, aby som súbor uložil ako súbor podporujúci makrá.
  • Klikneme na Nie a zvolíme Typ súboru podporujúceho makrá a súbor uložíme.
  • Potom zatvoríme okno s VBA kódom buď kliknutím na x alebo klávesovou skratkou ALT+Q.
  • A už stačí len zapisovať čas.

Tu je zdrojový kód:

Private Sub Worksheet_Change(ByVal Target As Range)
    
    'Ak používateľ zmení viac buniek súčasne, makro sa nevykoná
    If Target.Cells.Count > 1 Then Exit Sub
    
    'Definuje rozsah, pre ktorý má kód pracovať
    If Intersect(Target, Range("A3:B25")) Is Nothing Then Exit Sub

    On Error GoTo errHandler:

    With Target
        'Kód sa vykoná len pre číselné hodnoty
        If IsNumeric(.Value) Then
            'Vypnutie udalostí počas spustenia kódu
            Application.EnableEvents = False
            Select Case Len(.Value)
                Case 1 To 2
                    .Value = TimeSerial(0, .Value, 0)
                    .NumberFormat = "hh:mm"
                Case 3 To 4
                    .Value = TimeSerial(Int(.Value / 100), .Value Mod 100, 0)
                    .NumberFormat = "hh:mm"
                Case Else
            End Select
        End If
    End With
errHandler:
    Application.EnableEvents = True
End Sub

A ešte ukážkový súbor na stiahnutie:

close

Exceluj s Excelom!

1-krát za mesiac priamo do vášho emailu tipy a triky, ktoré vám pomôžu napredovať, pracovať rýchlo a efektívne!

Zásady spracúvania osobných údajov