Hmm... píšete o prechode cez polnoc, no ja tam žiadny prechod cez polnoc nevidím. Ako určujete, kto je v práci pred polnocou, keď nemáte data po kope?
No a ako píše marjankaj - mená. Kde sú? Nemôžete chcieť od nás aby sme robili spätné inžinierstvo a vhodnou kombinatorikou zisťovali, ako napáskovať vym yslené mená na tabuľku tak, aby sedeli príchody a odchody po logickej stránke. To by nedali výpočtovo ani číňania
. Tie Vaše reálne mená cez funkciu Nahradiť nahraďte vymyslenými, ak ch je veľa dá sa urobiť jednoduchá prevodná tabuľka za 3 min.
Aký terminál sa považuje za príchod do práce, a aký sa považuje za odchod z práce ? Parkovisko, hala, šatňa, ... ?
Vy chcete zisťovať odpracovaný čas, alebo čas strávený v objekte medzi príchodom do práce a odchodom z práce? Pretože fajčiar odpracuje menej času, ten čo chodí stále do šatne telefonovať asi tiež. A čo upratovačka, ktorá chodí do šatne a fajčiarne vykonávať prácu? Tej to zas nemôžete odrátať z odpracovaného času...
Noo bude to zábava.
Osekajte "trochu" tie data, či sa nevojdete do 300 KB. Ak nie, použite niektorú online Free službu, alebo určite sa v rodine nájde niekto s telefónom s Androidom, teda má určite účet Google, a ku každému je automaticky 15 GB Cloud "Google Disk" ("Google Drive"). Nahrajte, kliknite pravým a dajte Získať odkaz na zdieľanie (či tak nejak), a ten nám pošlite. Po vyriešení môžete z GD vymazať.
To musí isť do modulu listu, nie do normálneho modulu. Robil som to tak, aby to zvládlo viacnásobné zmeny, a tak som to aj testoval, ale netestoval som zmenu 1 bunky. Inak by ma trklo, že treba vo verzii 1 doplniť jednoprvkové pole. Takže upravené.
Vo verzii 2 by mohol nastať v špecifickom prípade kopírovania do multioblasti nesprávny výsledok. Išlo o to, že ak by ste skopíroval 2 bunky, a na vloženie by ste označil jednu 2 bunkovú oblasť a o niečo ďalej druhú 1 bunkovú oblasť, Excel automaticky vyplní aj tú jednobunkovú kópiou zdrojovej dvojbunkovej. A tá druhá vrátila zlý výsledok. To si musíte vyskúšať. Opravené.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Are As Range, Kde(), H(), i As Long
Set Zmena = Intersect(Cells(2, 2).Resize(Rows.Count - 1), Target)
If Zmena Is Nothing Then Exit Sub
Kde = Worksheets("List2").Range("B2:C27").Value
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
For Each Are In Zmena.Areas
With Are
If .Rows.Count = 1 Then ReDim H(1 To 1, 1 To 1): H(1, 1) = .Value Else H = .Value
For i = 1 To UBound(H, 1)
H(i, 1) = WorksheetFunction.VLookup(H(i, 1), Kde, 2, False)
If Err.Number <> 0 Then H(i, 1) = Empty: Err.Clear
Next i
.Offset(0, 1).Value = H
End With
Next Are
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Are As Range
Set Zmena = Intersect(Cells(2, 2).Resize(Rows.Count - 1), Target)
If Zmena Is Nothing Then Exit Sub
With Zmena.Offset(0, 1)
Application.ScreenUpdating = False
Application.EnableEvents = False
.Formula = "=IFERROR(VLOOKUP(B" & Zmena.Row & ",List2!$B$2:$C$27,2,FALSE),"""")"
For Each Are In .Areas
Are.Value = Are.Value
Next Are
Application.ScreenUpdating = True
Application.EnableEvents = True
End With
End Sub
2 varianty:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Are As Range, Kde(), H(), i As Long
Set Zmena = Intersect(Cells(2, 2).Resize(Rows.Count - 1), Target)
If Zmena Is Nothing Then Exit Sub
Kde = Worksheets("List2").Range("B2:C27").Value
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
For Each Are In Zmena.Areas
With Are
H = .Value
For i = 1 To UBound(H, 1)
H(i, 1) = WorksheetFunction.VLookup(H(i, 1), Kde, 2, False)
If Err.Number <> 0 Then H(i, 1) = Empty: Err.Clear
Next i
.Offset(0, 1).Value = H
End With
Next Are
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range
Set Zmena = Intersect(Cells(2, 2).Resize(Rows.Count - 1), Target)
If Zmena Is Nothing Then Exit Sub
With Zmena.Offset(0, 1)
Application.ScreenUpdating = False
Application.EnableEvents = False
.Formula = "=IFERROR(VLOOKUP(B" & Zmena.Row & ",List2!$B$2:$C$27,2,FALSE),"""")"
.Value = .Value
Application.ScreenUpdating = True
Application.EnableEvents = True
End With
End Sub
Nemusíte písať presne rovnaký vzorec ako tu už je. Stačí raz 
A ako som písal, dotaz a skladba "podmienok" je logický nezmysel. Nemôže byť
podmienka 1 TRUE - "A"
podmienka 1 FALSE - "B" a zároveň podmienka 2 ...
buď je pri FALSE "B" alebo nieje.
Nakreslite si niečo ako vývojový diagram vetvenia podmienok, ako sa učilo pri programovaní, a hneď musí každému docvaknúť nelogickosť dotazu.
Možno by sa to dalo aj takto:
Ak je
A1<=100
alebo
A1<=150 a zároveň pritom B1 je v jednom z intervalov 100-567 alebo 580-599
tak
"A"
inak vždy "B"
=IF(OR(A1<=100;AND(A1<=150;OR(AND(B1>=100;B1<=567);AND(B1>=580;B1<=599))));"A";"B")
=KDYŽ(NEBO(A1<=100;A(A1<=150;NEBO(A(B1>=100;B1<=567);A(B1>=580;B1<=599))));"A";"B")
Logický nezmysel.
Pokud je váha v buňce A1 do 100 kg včetně, napiš A, jinak B
číslo v buňce B1 od 100 do 567 a od 580 do 599
To preto, lebo vkladáte vzorec, a ten vzorec tam ostane, čiže sa pri kalkulácii prepočíta. Ten vložený a vypočítaný vzorec prepíšte jeho hodnotou. z brucha (oblasti som spojil, lebo sú spojité):
Sub Start()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Range("T17:AM18")
.Formula = "=RANDARRAY(1,1,0,0.02,FALSE)"
.Value = .Value
End With
With Range("T19:AM20")
.Formula = "=RANDARRAY(1,1,1.47,1.51,FALSE)"
.Value = .Value
End With
With Range("T21:AM22")
.Formula = "=RANDARRAY(1,1,89.98,90.02,FALSE)"
.Value = .Value
End With
With Range("T23:AM24")
.Formula = "=RANDARRAY(1,1,142.47,142.53,FALSE)"
.Value = .Value
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
So mnou ísť na pivo je na figu. Vypijem jedno a končím. Ja som taký "prd-chlap". 
Keď už máte taký "fundamentalistický" postoj k zmene, tak som zmenil len nevyhnutné:
-Mesiac a rok "Leden "&srok určite nebude fungovať inde ako v CZ, teda ani mne, preto zmenené na univerzál.
-podmienené formátovanie z rovnakého dôvodu nefungovalo
-v jednej skupine (tuším B) ste mal zlé vzorce na "plné směny v měsíci
-na sviatky neprehľadávajte celý stĺpec B:B, keď máte len 13 sviatkov
-v B skupine ste sa odkazoval na zlý riadok výpočtu druhov smien (19 vs 20)
-vzorce v súčtoch sú manuálne vypísané, to by sa zišlo urobiť tak, aby boli vypočítavané, posúvané oblasti, aby bol vzorec naťahovateľný. Pretože pri nejakej úprave počtu a umiestnení riadkov to môže byť pracné.
Obyčajná podmienka:
=IF([@Master]="";[@Slave];[@Master])
=KDYŽ([@Master]="";[@Slave];[@Master])
?
Biely text na bielom pozadí ???
Takže netreba nič. Premýšľal som na ADO, cez ktoré sa dá relatívne rýchlo získať zoznam listov, a na tie by sa dal aplikovať SUMPRODUCT s kontrolou oblasti na výskyt (v zatvorenom zošite). Ale práve tá oblasť je problém. Možno by to šlo cez ADO zistiť. Potom by sa tie vzorce naraz zapísali do pomocných buniek a máte celkom rýchlo výsledok. Lenže toto by asi bolo skôr na PowerQuery, kde netreba riešiť oblasti, lenže treba čarovať zase s názvami stĺpcov...
Neuviedol ste ani či hľadať v celom liste alebo iba v jednom stĺpci. Ani či sú súbory a listy rovnaké alebo rôznorodé.
Nápady by boli, hneď 2, ale príliš sa mi do toho nechce. Tak snáď ste si pomohol v TC.
Ten vzorec ale nemáte správne prerobený. Namiesto bodkočiarok (středníků) musia byť v EN verzii čiarky.
Vkladajte EN verzie vzorcov a bude to fungovať. Takto pochybujem, lebo pre neho bude FormulaLocal po EN pre Vás CZ. Ale keď to budete vkladať po EN, tak to pôjde obom.
Oblíbený formulář Faktura byl vylepšen a rozšířen.

Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.