Automatizarea în Excel elimină sarcinile repetitive și reduce erorile umane. Există trei niveluri de automatizare, fiecare potrivit pentru scenarii diferite: macro-urile înregistrate (fără cod), VBA personalizat (cu cod) și Power Automate (fără Excel deschis). Iată cum funcționează fiecare.
1. Înregistrarea macro-urilor — automatizare fără cod
Macro Recorder înregistrează exact acțiunile tale ca instrucțiuni VBA. Oricând rulezi macro-ul, execută aceleași acțiuni instantaneu.
// Activare Developer Tab (dacă nu e vizibil):
// File → Options → Customize Ribbon → Developer ✓
// Pași înregistrare macro:
// 1. Developer → Record Macro → dai un nume (fără spații): FormatareTabel
// 2. Shortcut Key: Ctrl+Shift+F (opțional)
// 3. Store macro in: This Workbook
// 4. Execuți acțiunile dorite (formatare, sortare, filtrare etc.)
// 5. Developer → Stop Recording
// Exemplu cod generat automat pentru Bold + Culoare antet:
Sub FormatareTabel()
Range("A1:F1").Select
With Selection
.Font.Bold = True
.Interior.Color = RGB(46, 106, 79) ' verde #2D6A4F
.Font.Color = RGB(255, 255, 255)
End With
Range("A1").Select
End SubÎmbunătățiri esențiale ale codului înregistrat
' CODUL ÎNREGISTRAT (cu Select — lent și fragil):
Range("A1:F1").Select
Selection.Font.Bold = True
' CODUL OPTIMIZAT (fără Select — de 3-5x mai rapid):
Range("A1:F1").Font.Bold = True
' REFERINȚĂ DINAMICĂ în loc de A1:F1 hardcodat:
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range(ws.Cells(1,1), ws.Cells(1, ws.UsedRange.Columns.Count)).Font.Bold = True
' VARIABILA pentru ultimul rând (nu hardcoda numărul):
Dim UltimulRand As Long
UltimulRand = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row2. VBA — structuri de control esențiale
' Buclă FOR — procesare rânduri:
Sub ProceseazaRanduri()
Dim i As Long
Dim UltimulRand As Long
UltimulRand = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To UltimulRand ' Începe de la 2 (skip header)
If Cells(i, "C").Value > 10000 Then
Cells(i, "D").Value = "VIP"
Cells(i, "D").Interior.Color = RGB(255, 215, 0)
ElseIf Cells(i, "C").Value > 5000 Then
Cells(i, "D").Value = "Standard"
Else
Cells(i, "D").Value = "Basic"
End If
Next i
End Sub
' Buclă FOR EACH — procesare foi de calcul:
Sub RedenumesteFoile()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 4) = "Luna" Then
ws.Tab.Color = RGB(0, 112, 192)
End If
Next ws
End Sub
' DO WHILE — procesare până la condiție:
Sub GasesteUltimulRandNecomplet()
Dim i As Long
i = 2
Do While Cells(i, "A").Value <> ""
i = i + 1
Loop
MsgBox "Primul rând gol: " & i
End Sub3. Evenimente Worksheet — automatizare la acțiuni utilizator
' Codul se plasează în modulul foii (clic dreapta pe tab foaie → View Code)
' Eveniment la modificare celulă:
Private Sub Worksheet_Change(ByVal Target As Range)
' Dacă se modifică coloana C (Status):
If Target.Column = 3 And Target.Row > 1 Then
If Target.Value = "Finalizat" Then
Target.Offset(0, 1).Value = Now() ' Timestamp finalizare
Target.EntireRow.Interior.Color = RGB(198, 239, 206) ' Verde deschis
End If
End If
End Sub
' Eveniment la selectare celulă (validare interactivă):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 5 Then
Application.StatusBar = "Introduceți suma în RON, format: 1234.56"
Else
Application.StatusBar = False
End If
End Sub
' Eveniment la deschidere workbook (în modul ThisWorkbook):
Private Sub Workbook_Open()
' Refresh automat date
ActiveWorkbook.RefreshAll
' Navigare la foaia principală
Sheets("Dashboard").Activate
' Actualizare data raport
Sheets("Config").Range("B1").Value = Now()
End Sub4. Funcții LAMBDA — automatizare calcule reutilizabile
LAMBDA (Excel 365) permite crearea funcțiilor personalizate direct în formule, fără VBA. Odată definite în Name Manager, se pot folosi în orice celulă.
// Definire funcție LAMBDA în Name Manager (Formulas → Name Manager → New):
// Name: CalcTVA
// Refers to:
=LAMBDA(valoare, cota_tva, valoare * (1 + cota_tva / 100))
// Utilizare:
=CalcTVA(B2, 19) // Preț cu TVA 19%
=CalcTVA(B2, 9) // Preț cu TVA 9% (alimente)
// Funcție recursivă LAMBDA — factorial:
// Name: Factorial
=LAMBDA(n, IF(n<=1, 1, n * Factorial(n-1)))
=Factorial(5) // Returnează 120
// LAMBDA cu LET pentru calcule intermediare:
=LET(
venit_brut, B2,
cas, venit_brut * 0.25,
cass, venit_brut * 0.10,
baza_impozit, venit_brut - cas - cass - 300,
impozit, baza_impozit * 0.10,
venit_brut - cas - cass - impozit
)
// Funcție personalizată pentru formatare cod fiscal:
// Name: FormatCIF
=LAMBDA(cif,
LET(
cifStr, TEXT(cif, "0"),
IF(LEN(cifStr) < 10,
REPT("0", 10-LEN(cifStr)) & cifStr,
cifStr)
)
)5. Programarea macro-urilor cu Application.OnTime
' Rulare automată la o oră fixă (fișierul trebuie deschis):
Sub ProgrameazaRefresh()
' Rulează ActualizeazaDate zilnic la 08:00
Application.OnTime TimeValue("08:00:00"), "ActualizeazaDate"
End Sub
' Rulare la fiecare 30 de minute:
Dim TimpUrmatoareRulare As Date
Sub RefreshPeriodic()
Call ActualizeazaDate
TimpUrmatoareRulare = Now + TimeValue("00:30:00")
Application.OnTime TimpUrmatoareRulare, "RefreshPeriodic"
End Sub
Sub OpresteProgramarea()
On Error Resume Next
Application.OnTime TimpUrmatoareRulare, "RefreshPeriodic", , False
End Sub
' Activare la deschidere workbook:
Private Sub Workbook_Open()
Call ProgrameazaRefresh
End Sub6. Debugging și gestionarea erorilor VBA
' Gestionare erori cu On Error:
Sub ImportDateCuErori()
On Error GoTo GestionareEroare
Dim ws As Worksheet
Set ws = Sheets("Date_Import")
' Cod care poate genera erori:
ws.QueryTables(1).Refresh BackgroundQuery:=False
MsgBox "Import finalizat cu succes!", vbInformation
Exit Sub
GestionareEroare:
MsgBox "Eroare " & Err.Number & ": " & Err.Description & _
vbNewLine & "Verifică sursa de date și reconectează.", vbCritical
Resume Next
End Sub
' Debug.Print — înregistrare în Immediate Window (Ctrl+G):
Debug.Print "Rând " & i & " | Valoare: " & Cells(i,"C").Value
' Breakpoint temporar pentru investigare:
' Clic în marginea stângă a codului → punct roșu → F5 pentru rulare pas cu pasCursuri practice de automatizare Excel (VBA, Power Query, LAMBDA) sunt disponibile la Excel Group MD, cu exerciții pe cazuri reale din business-ul tău.

