Ešte ma napadlo priložiť jednoduchší vzorec pre prípad, že budú ID vždy za sebou. Vyberte si...
Alebo makrom. Zatiaľ je urobené tak, že sa počíta s tým, že sú oba stĺpce vedľa seba, a tabuľka má len 2 stĺpce. Dá sa poriešiť inak...
vzorcom iba komplikovanejším, v skrytom stĺpci. Ale zato môžu byť rozhádzané, nemusia byť za sebou.
Inak v jednom prípade vravíte že pri 5 sa použije E2-D2, a potom že sa pri 5 použije MD-D (čo zodpovedá presnému opaku D2-E2)
Označte si celé stĺpce a zrušte formátovanie nastavením na Všeobecné alebo Číslo na 2 desatinné.
Spomínaný vzorec od eLCHa Vám musí fungovať, len sa rozhodnite, či D2-E alebo E2-D2 bude pre 5-ku, teda prvý parameter, alebo ako druhý parameter.
=IF(LEFT(B2;1)/1=5;D2-E2;E2-D2)
=KDYŽ(ZLEVA(B2;1)/1=5;D2-E2;E2-D2)
nemôže byť problém ...
Príklad:
Sub OdstranSloupce()
Dim i As Integer, rngDEL As Range, Radek()
Const HDN = 999
With Worksheets("Data")
Radek = .Range("A36:Z36").Value
For i = 1 To UBound(Radek, 2)
If Radek(1, i) = HDN Then
If rngDEL Is Nothing Then Set rngDEL = .Columns(i) Else Set rngDEL = Union(rngDEL, .Columns(i))
End If
Next i
If Not rngDEL Is Nothing Then rngDEL.Delete: Set rngDEL = Nothing
End With
End Sub
A čo Vám na tom nefunguje ? Veď to máte tak, ako potrebujete, nie ?
Hovoríte o CB v liste alebo vo VBA ?
To je pravda, to 1 % je väčší žrút času a nervov pri debugovaní, ako často celý ostatok kódu. V tomto prípade (a ja stále hovorím výhradne o tomto presnom zadaní), sa za else chyba nedostane. To On Error treba brať v kontexte rýchleho testu zadaného reťazca na čas, už pri písaní, a je tam zámerne, a funkčné.
Už na to kafrem. lajos -OK- tak potom ...
Samozrejme, ak chcete počítať cez polnoc treba dátum, tiež som to písal. Ale začalo to úplne inak. Prečítajte si:
...V Userform zadávám:... "čas začátek" ...
Sub Vypocet()
Dim Cas As Double, T1 As Double, T2 As Double, M1 As Integer, M2 As Integer
On Error Resume Next
T1 = TimeValue(TextBox1): T2 = TimeValue(TextBox2)
If Err <> 0 Then
TextBox3 = ""
Else
M1 = Hour(T1) * 60 + Minute(T1): M2 = Hour(T2) * 60 + Minute(T2)
TextBox3 = IIf(M1 > M2, 1440 - M1 + M2, M2 - M1)
End If
On Error GoTo 0
End Sub
Ale fungovať to bude iba ak je príznakom prechodu cez polnoc to, že je druhý čas menší ako prvý. Ak hrozí rozdiel medzi časmi >=24 hod (1440 min), tak potrebujete aj dátum.
pr.
Mohlo by to byť aj takto:
Private Sub TextBox1_Change()
Call Vypocet
End Sub
Private Sub TextBox2_Change()
Call Vypocet
End Sub
Sub Vypocet()
Dim Cas As Double
On Error Resume Next
Cas = TimeValue(TextBox2) - TimeValue(TextBox1)
If Err <> 0 Then TextBox3 = "" Else TextBox3 = Hour(Cas) * 60 + Minute(Cas)
On Error GoTo 0
End Sub
alebo
Sub Vypocet2()
Dim Cas As Double
On Error Resume Next
Cas = TimeValue(TextBox2) - TimeValue(TextBox1)
If Err <> 0 Then TextBox3 = "" Else TextBox3 = WorksheetFunction.Text(Cas, "[m]")
On Error GoTo 0
End Sub
Pr.
Edit:
Aha teraz mi docvaklo, že to nebude asi vždy doradu. Či?
Veď to je jednoduché. Tu máte príklad. V tom Vašom vzorci nemáte ani "!" za názvom listu ani rozsah (len bunku).
Ako som písal v predošlej téme, ktorú ste založil asi omylom. Vidím, že v tejto máte info navyše, ale nedostatočné.
Prílohu zabalte do ZIP ak je to XLSM, a k je to XLS/XLSX ide priložiť priamo, tam kde píšete máte tlačítko Vybrať súbor. Neviem, aké sú momentálne veľkostné limity, ale voľakedy boli 256 KB.
Popis je nedostatočný preto, lebo mi netušíme čo za hodnoty máte v A$1, a čo má znamenať to "i" a "af". Ak "i" a "af" sú listy, tak máte snáď v A$1 / B$1 kompletnú adresu buniek aj s výkričníkom, teda aby Vám vznikol reťazec podobný tomuto
"af!A100:A200"
v prípade názvu listu s medzerami treba názov obaliť do apostrofov
"'af'!A100:A200"
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.