INDIRECT și OFFSET în Excel: referințe dinamice pentru rapoarte care se adaptează singure
Există momente când o formulă normală nu e suficientă — pentru că nu știi dinainte din ce celulă sau coloană vrei să citești. Valoarea se schimbă în funcție de selecția utilizatorului, de luna curentă sau de o altă celulă.
Asta e exact problema pe care o rezolvă INDIRECT și OFFSET. Sunt funcțiile care transformă un text sau o poziție relativă într-o referință reală, în timp de execuție.
INDIRECT: construiești o referință dintr-un text
=INDIRECT(ref_text; [stil_ref])
INDIRECT primește un text — de exemplu "B5" sau "Vanzari!A1" — și îl tratează ca o adresă de celulă reală.
Exemplu de bază
=INDIRECT("A" & B1)
Dacă B1 conține 5, formula returnează valoarea din A5. Dacă B1 conține 12, returnează valoarea din A12.
Utilitatea: poți construi dinamic adresa din care citești — în funcție de orice altă celulă.
5 utilizări practice INDIRECT
1. Dropdown care schimbă foaia sursă
Ai un dropdown în A1 cu lunile anului: Ianuarie, Februarie, Martie… Fiecare lună e și numele unei foi Excel.
=SUMA(INDIRECT(A1 & "!B2:B100"))
Selectezi „Martie” din dropdown → formula sumează automat datele din foaia „Martie”.
Aplicație reală: dashboard cu selector de lună, fără să schimbi manual foaia.
2. Referință la un tabel Named Range dinamic
Ai Named Ranges pentru fiecare regiune: Nord, Sud, Est, Vest. Utilizatorul selectează regiunea din celula B1.
=SUMA(INDIRECT(B1))
Returnează suma din Named Range-ul ales. Fără IF, fără SWITCH.
3. Raport cu coloane variabile
Ai un tabel cu lunile pe coloane (B = Ianuarie, C = Februarie, etc.). Vrei să afișezi întotdeauna luna curentă:
// Coloana lunii curente (Ianuarie=B, Februarie=C, etc.)
=INDIRECT(ADRESA(2; LUNA(AZI())+1))
// sau cu referință la antet:
=INDIRECT(ADRESA(2; MATCH(TEXT(AZI();"LLLL"); 1:1; 0)))
4. Consolidare din mai multe foi fără a le lista manual
Ai foi denumite 01, 02, …, 12 pentru fiecare lună.
// Suma din celula B5 din toate foile 01-12:
=SUMPRODUCT(INDIRECT("'" & TEXT(SEQUENCE(12;1;1);"00") & "'!B5"))
Adaptezi SEQUENCE la numărul de foi — fără să listezi manual fiecare foaie.
5. Validare încrucișată (dropdown în cascadă)
Ai în A1 un dropdown cu categoria (Fructe, Legume, Lactate). Fiecare categorie e un Named Range cu produsele respective.
Data Validation în B1 → List → Source:
=INDIRECT(A1)
Selectezi „Fructe” → dropdown-ul din B1 arată automat: Mere, Pere, Prune. Selectezi „Legume” → arată: Roșii, Ardei, Castraveți.
OFFSET: te muți relativ față de un punct de plecare
=OFFSET(referinta; rânduri; coloane; [inaltime]; [latime])
OFFSET pornește dintr-o celulă de referință și se deplasează cu un număr specificat de rânduri și coloane.
Exemplu de bază
=OFFSET(A1; 3; 2)
Pornind din A1, mergi 3 rânduri în jos și 2 coloane la dreapta → returnează valoarea din C4.
5 utilizări practice OFFSET
1. Ultimele N valori dintr-o listă în creștere
Ai o coloană cu date zilnice care crește în fiecare zi. Vrei media ultimelor 7 zile fără să actualizezi manual formula:
=AVERAGE(OFFSET(A1; COUNTA(A:A)-7; 0; 7; 1))
COUNTA numără câte valori există → OFFSET se duce la ultima valoare minus 6 → selectează blocul de 7 → AVERAGE calculează media.
2. Grafic cu fereastră glisantă
Vrei un grafic care arată întotdeauna ultimele 12 luni, nu tot istoricul.
Definești un Named Range dinamic:
Nume: UltimeleDate
Referă la: =OFFSET(Date!$B$1; COUNTA(Date!$A:$A)-12; 0; 12; 1)
Graficul folosește Named Range-ul → se actualizează automat când adaugi luna nouă.
3. OFFSET cu înălțime/lățime variabilă
=SUMA(OFFSET(A1; 0; 0; B1; 1))
Dacă B1 conține 5 → sumează A1:A5. Dacă B1 conține 10 → sumează A1:A10.
Util pentru rapoarte unde utilizatorul alege numărul de rânduri de inclus.
4. Referință la coloana lunii curente dintr-un tabel
=SUMA(OFFSET(Tabel!$B$2; 0; LUNA(AZI())-1; 100; 1))
Selectează automat coloana lunii curente din tabel (presupunând că B = Ianuarie, C = Februarie etc.).
5. Meniu de navigare în foi lungi
Un buton „Mergi la secțiunea N” care scrollează la o secțiune specifică:
' VBA folosind OFFSET logic:
Sub MergiLaLuna(luna As Integer)
Dim celSursa As Range
Set celSursa = Range("A1")
celSursa.Offset((luna - 1) * 50, 0).Select
End Sub
INDIRECT vs OFFSET: când folosești ce
| Situație | INDIRECT | OFFSET |
|---|---|---|
| Referință la altă foaie dinamic | ✅ ideal | ❌ nu suportă direct |
| Referință la Named Range dinamic | ✅ ideal | ❌ |
| Ultimele N valori dintr-o listă | ❌ complicat | ✅ ideal |
| Grafic cu fereastră glisantă | ❌ | ✅ ideal |
| Dropdown în cascadă | ✅ standard | ❌ |
| Referință relativă față de un punct | ❌ | ✅ ideal |
Atenție: INDIRECT și OFFSET sunt volatile
Ambele funcții sunt volatile — se recalculează la orice modificare a fișierului, nu doar când celulele referite se schimbă. Pe fișiere mari cu sute de INDIRECT/OFFSET, performanța poate scădea.
Soluție:
- Limitează utilizarea lor la celule de control (dropdown, selectorare) nu la coloane întregi
- Pe seturi mari de date, înlocuiește cu INDEX (non-volatil) unde e posibil
- Verifică performanța: Formule → Evaluare formulă sau folosește Excel Profiler
Concluzie
INDIRECT și OFFSET sunt funcțiile care fac diferența dintre un raport static și unul cu adevărat dinamic — unde utilizatorul alege luna, regiunea sau categoria și tot restul se actualizează automat. Odată înțelese, devin parte din toolbox-ul permanent al oricărui utilizator Excel avansat.
La Excel Group construim dashboarduri dinamice cu INDIRECT, OFFSET și Named Ranges pentru firme din România și Moldova. Contactează-ne.
Întrebări frecvente
INDIRECT funcționează cu referințe R1C1 (stil linie-coloană)?
Da — al doilea parametru al INDIRECT: FALSE pentru stil A1 (implicit), TRUE pentru stil R1C1. Exemplu: =INDIRECT("R5C3";TRUE) returnează valoarea din rândul 5, coloana 3 (adică C5).
Pot combina INDIRECT și OFFSET?
Da — =OFFSET(INDIRECT(A1&"!B1"); 3; 0) merge 3 rânduri în jos față de B1 din foaia specificată în A1. Util dar poate fi lent pe date mari.
Există alternativă modernă la INDIRECT pentru Dynamic Arrays?
Da — în multe cazuri, FILTER sau XLOOKUP cu referințe structurate înlocuiesc INDIRECT mai eficient și fără volatilitate. Evaluează cazul specific înainte de a alege.

