sâmbătă, 24 septembrie 2011

Utilizarea functiilor LOOKUP pentru interogarea tabelelor de date - HLOOKUP

Desi in postul anterior am spus ca o sa revin cu un alt post despre functiile HLOOKUP si INDEX, acum va voi scrie doar despre functia HLOOKUP pentru ca am inceput sa scriu si a iesit cam lunga povestea ca sa mai pot scrie si despre INDEX.
  • Functia HLOOKUP - este similara cu VLOOKUP, insa face oposului ei. Daca VLOOKUP cauta o valoare in prima coloana a unui tabel, HLOOKUP cauta o valoare in primul rand al unui tabel de date. Sintaxa acestei functii este urmatoarea:  HLOOKUP(lookup_value,table_array,row_index_num,range_lookup)
    1. Lookup_value - reprezinta valoarea pe care dorim sa o cautam in primul rand al tabelului de date. Dca in tabelul de date nu exista valoarea cautata de hlookup atunci functia va returna eroarea #N/A.
    2. Table_array - este tabelul de date in care cautam valoarea dorita. Pentru table_array se poate folosi o selectie din fisier sau o zona definita prin Named Range. Principala conditie in hlookup este ca primul rand al tabelului sa contina valorile unde cautam lookup_value.
    3. Row_index - reprezinta numarul randului din care dorim sa fie returnata informatia pentru valoarea cautata. Daca row_index este mai mic ca 1, functia va returna eroare #VALUE!, iar daca row_index este un numar mai mare decat numarul de randuri din tabel, hlookup va returna eraoare #REF!.
    4. Range_lookup - la fel ca la VLOOKUP, acest camp reprezinta o valoare logica ce specifica daca se doreste o potrivire exacta sau o potrivire aproximativa. Daca este scris True, 1 sau este omis functia va returna o potrivire aproximativa, iar daca este scris False sau 0 atunci va returna o potrivire exacta. 


Pentru a intelege mai bine functia HLOOKUP am creat un tabel in care avem Total vanzari pentru angajati pe anii 2009, 2010 si 2011.


In alta parte a fisierului dorim sa aflam cat a vandut Petrescu Andrei intr-un an. An ce poate fi completat de catre utilizator.
Pentru asta folosim functia HLOOKUP cu urmatoarea sintaxa: =HLOOKUP(G2,$A$2:$D$5,4,0)






  1. Selectam celula in care dorim sa aflam totalul vanzarilor avute de Petrescu Andrei.
  2. Scriem =Hlookup(
  3. Alegem celula unde vom scrie anul pentru care dorim sa aflam totalul vanzarilor. In cazul nostru aceasta celula este G2.
  4. Alegem tabelul in care avem informatiile despre vanzari. In exemplul nostru acest tabel este A2:D2 dar l-am facut referinta in caz ca doresc sa copiez formula in alta parte.
  5. Scriem numarul randului in care se gaseste informatia pe care dorim sa o aflam. In cazul nostru acesta este 4.
  6. Alegem True sau False/ 0 sau 1 in functie de cum dorim sa fie executata cautarea. In cazul nostru, dorim o cautare exacta deci alegem 0.
  7. Apasam ENTER.











Toate bune si frumoase dar ce facem cand vrem sa schimbam si numele angajatului pentru care dorim sa aflam totalul vanzarilor? O solutie ar fi sa schimbam numarul randului in formula dar decat sa faci asta de fiecare data mai bine cauti direct in tabel. Dar exista o solutie....putem folosi functia MATCH ca sa aflam numarul randului unde se afla informatia dorita.


Noua sintaxa este urmatoarea: =HLOOKUP(G5,$A$2:$D$5,MATCH(F6,$A$2:$A$5,0),0). Nu va mai explic primii pasi si trec direct la functia MATCH(F6,$A$2:$A$5,0):









  • Cand ajungem la punctul 5 de mai sus scriem MATCH(.
  • Alegem celula in care dorim sa scriem numele persoanei pentru care dorim sa aflam totalul vanzarilor, in cazul nostru F6;
  • Alegem coloana din tabelul de date in care se afla numele persoanei. Atentie daca tabelul nu incepe de la primul rand al sheet-ului nu trebuie sa selectati toata coloana A:A ci selectati doar de unde incepe tabelul si cum am mai spus apasati F4 pentru a face selectia referinta. In exemplul nostru, coloana selectata este $A$2:$A$5.
  •  Ultimul argument al functiei match este optional si poate fi -1, 0 sau 1. Daca se alege 1, match va cauta cea mai mare valoare care este mai mica sau egala cu valoarea cautata, iar tabelul trebuie sa fie sortat ascendent. Daca se alege 0 se face o cautare exacta, iar daca se alege -1, match va cauta cea mai mica valoare care este mai mare sau egala cu valoarea cautata, iar tabelul trebuie sa fie sortat descrescator. In cazul nostru, dorim sa fie o cautare exacta si scriem 0.













    Atat functiile HLOOKUP cat si VLOOKUP pot fi folosite impreuna cu IF si ISNA. De multe ori, cand aceste doua functii sunt folosite pentru un numar mare de valori, exista o posibilitate ridicata ca rezultatul lor sa fie #N/A. Dar daca la randul lor aceste informatii sunt folosite in alte formule aceasta eroare poate da peste cap tot sistemul. Pentru a evita acest lucru se poate folosi IF si ISNA pentru ca aceste functii sa returneze 0 in schimb.
    Dupa cum se poate vedea in poza de mai jos, daca cautam totalul vanzarilor unui angajat care nu este in tabel primim eroarea #N/A.
















    Daca in schimb folosim sintaxa urmatoarea vom primi 0: =IF(ISNA(HLOOKUP(G8,$A$2:$D$5,MATCH(F9,$A$2:$A$5,0),0)),"0", HLOOKUP(G8,$A$2:$D$5,MATCH(F9,$A$2:$A$5,0),0))



















    Din pacate in postul anterior am uitat sa pun link-ul cu fisierul in care gasiti exemplul din post, dar il puteti gasi impreuna cu exemplele pentru HLOOKUP la urmatorul link: Lookup.xls.

    0 comentarii:

    Trimiteți un comentariu