Departamentele HR gestionează volume mari de date repetitive: fișe angajați, calcul concedii, state de plată, rapoarte de prezență. Excel are funcții specifice pentru fiecare dintre aceste procese. Acest ghid prezintă formulele și structurile folosite efectiv de HR-iști, cu exemple concrete.
1. Calculul zilelor de concediu cu NETWORKDAYS
NETWORKDAYS calculează automat zilele lucrătoare dintr-un interval, excludând weekend-urile și sărbătorile legale. Este funcția standard pentru concedii și termene.
// Zile lucrătoare între două date (fără sărbători):
=NETWORKDAYS(DataStart, DataEnd)
// Cu excluderea sărbătorilor legale (lista în coloana H):
=NETWORKDAYS(B2, C2, $H$2:$H$20)
// Calcul zile concediu rămase:
=Drept_zile_CO - SUMIFS(tbl_CO[Zile_luate], tbl_CO[ID_Angajat], A2)
// Data de revenire din concediu (după N zile lucrătoare):
=WORKDAY(DataStart, NrZile, $H$2:$H$20)
// Verificare dacă o dată este zi lucrătoare:
=AND(WEEKDAY(A2,2)<=5, ISNA(MATCH(A2,$H$2:$H$20,0)))2. Calcul salarii cu grile și sporuri
// Structura tabel salarizare (tbl_Salarii):
// Coloane: ID | Nume | SalarBrut | GradA | Vechime | Norma | ZileAbsente
// Calcul spor vechime (exemplu grile 0/5/10/15/20 de ani → 0/5/10/15/20%):
=SalarBrut * VLOOKUP(Vechime, tbl_GrileVechime, 2, TRUE) / 100
// Sau cu IFS (Excel 2019+):
=SalarBrut * IFS(
Vechime < 5, 0,
Vechime < 10, 0.05,
Vechime < 15, 0.10,
Vechime < 20, 0.15,
TRUE, 0.20
)
// Calcul salariu net simplificat (România - CAS 25%, CASS 10%, Impozit 10%):
=SalarBrut * (1 - 0.25 - 0.10) * (1 - 0.10)
// Calcul pentru muncă parțială (normă redusă):
=SalarBrut * ([@Norma] / 8)
// Deducere absențe nemotivate:
=SalarBrut - (SalarBrut / ZileLucratoareLuna * ZileAbsente)Tabel grile salarizare cu XLOOKUP
// XLOOKUP cu match exact sau mai mic — ideal pentru grile:
=XLOOKUP(Vechime, tbl_Grile[AniMin], tbl_Grile[Procent], 0, -1)
// Al 4-lea argument: 0 = valoare lipsă → 0
// Al 5-lea argument: -1 = caută valoarea egală sau mai mică
// Combinare salariu + spor + tichete - rețineri:
=SalarBrut
+ Spor_Vechime
+ IF(TicheteMasa="Da", NrZileLucrate*28.18, 0)
- Avans
- Popriri3. Registrul de prezență cu COUNTIFS
// Structura tabel prezență (tbl_Prezenta):
// Coloane: Data | ID_Angajat | Tip (P=prezent, CO=concediu, M=medical, A=absent)
// Zile prezent pe angajat în luna curentă:
=COUNTIFS(
tbl_Prezenta[ID_Angajat], A2,
tbl_Prezenta[Tip], "P",
tbl_Prezenta[Data], ">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
tbl_Prezenta[Data], "<="&TODAY()
)
// Zile concediu medical YTD:
=COUNTIFS(
tbl_Prezenta[ID_Angajat], A2,
tbl_Prezenta[Tip], "M",
tbl_Prezenta[Data], ">="&DATE(YEAR(TODAY()),1,1)
)
// Procent prezență lunară:
=ZilePrezent / NETWORKDAYS(DATE(YEAR(TODAY()),MONTH(TODAY()),1), TODAY(), $H$2:$H$20)4. Fișa angajatului cu XLOOKUP și INDEX/MATCH
// Tabel master angajați (tbl_Angajati):
// ID | Nume | Prenume | CNP | DataAngajare | Functie | Departament | Email
// Căutare completă după ID — returnează toate câmpurile:
=XLOOKUP(CautaID, tbl_Angajati[ID], tbl_Angajati[Nume], "Negăsit")
// Calcul vechime în ani:
=DATEDIF(DataAngajare, TODAY(), "Y") & " ani " &
DATEDIF(DataAngajare, TODAY(), "YM") & " luni"
// Angajații cu aniversare contractului în luna curentă:
=FILTER(
tbl_Angajati[Nume],
MONTH(tbl_Angajati[DataAngajare]) = MONTH(TODAY())
)
// Trimitere email automat prin VBA (exemplu simplificat):
Sub TrimiteRemindere()
Dim i As Long
For i = 2 To tbl_Angajati.ListRows.Count + 1
If Month(Cells(i, 6)) = Month(Date) And Day(Cells(i, 6)) = Day(Date) Then
' Trimite email prin Outlook
Call TrimiteEmail(Cells(i, 8), "Aniversare contract", "...")
End If
Next i
End Sub5. Tabel Pivot pentru rapoarte HR
Tabelele Pivot centralizează automat datele din registrele de prezență și salarizare, fără formule SUMIFS complexe.
// Creare Pivot din tabelul de prezență:
// Insert → PivotTable → From Table: tbl_Prezenta → New Sheet
// Configurare raport prezență lunară:
// Rows: Departament, Angajat
// Columns: Tip (P/CO/M/A)
// Values: Count of Data
// Filtrare pe lună cu Slicer (Insert → Slicer → Data)
// Raport costuri salariale pe departament:
// Rows: Departament
// Values: Sum of SalarBrut → Show Values As → % of Grand Total
// Actualizare automată la deschidere fișier (VBA):
Private Sub Workbook_Open()
ActiveWorkbook.RefreshAll
End Sub6. Import date din sistemul de pontaj
// Power Query — import CSV export din sistemul de pontaj:
// Data → Get Data → From File → From CSV
// Transformări tipice pentru date pontaj:
// 1. Split Column pe delimitator (Data + Ora din același câmp)
// 2. Change Type → Date, Time
// 3. Add Column → Custom → calcul ore lucrate:
= Duration.Hours([OraIesire] - [OraIntrare])
// 4. Replace Values — standardizare tipuri absențe
// 5. Merge cu tbl_Angajati pe codul de angajat
// Validare ore suplimentare (>8h/zi):
= if [OreLucrate] > 8 then [OreLucrate] - 8 else 0Consultanța specializată pentru sisteme HR în Excel, inclusiv integrare cu sisteme de salarizare, este disponibilă la Excel Group MD.

