Aceasta este o copie de probă. Site-ul adevărat este excel-group.ro.
Meniu
INDIRECT și OFFSET în Excel – funcții pentru referințe dinamice, dropdown în cascadă, grafic cu fereastră glisantă și rapoarte adaptabile

INDIRECT și OFFSET în Excel: referințe dinamice pentru rapoarte care se adaptează singure

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *