Invatare Atomica

Functii pe siruri de caractere, functii financiare si functii utilizator

Cum prelucrezi un text din foaia de calcul, cum calculezi o rata de credit si cum iti construiesti propria functie, atunci cand niciuna dintre cele predefinite nu face exact ce ai nevoie

Progres lectie:
0%
🎯

De ce conteaza aceasta lectie

Multe evidente de la locul de munca nu sunt doar numere: sunt coduri de proba, nume de clienti scrise cu greseli de tastare, denumiri de piese sau rapoarte care trebuie sa arate curat pe hartie. Foaia de calcul poate desface un cod in bucati, poate curata un text scris neglijent si poate calcula automat o rata de credit sau o economie in timp — daca stii ce functie sa folosesti si cum. Iar cand nicio functie gata facuta nu acopera exact regula ta (o incadrare speciala, un calcul repetat cu o conditie proprie), poti sa iti scrii propria functie, pe care apoi o folosesti in celule exact ca pe SUM sau VLOOKUP.

Dupa aceasta lectie vei putea:

  • Sa afli lungimea unui text si sa extragi caractere de la inceput, de la sfarsit sau din mijlocul lui, cu LEN, LEFT, RIGHT si MID
  • Sa cureti spatiile in plus dintr-un text cu TRIM si sa unesti mai multe texte intr-unul singur cu CONCAT sau operatorul &
  • Sa transformi un numar intr-un text formatat pentru rapoarte, cu functia TEXT
  • Sa validezi date cu functiile informative ISBLANK, ISNUMBER si ISERROR
  • Sa calculezi rata unui credit cu PMT si valoarea viitoare a unei economii cu FV
  • Sa scrii o functie proprie de utilizator in VBA si sa o apelezi dintr-o celula, ca pe orice alta functie

Incearca singur!

Provocare — inainte sa citesti:

Esti tehnician la un ocol silvic si primesti un tabel cu 300 de coduri de proba, de forma SLV-2026-114: primele 3 litere arata categoria, urmatoarele 4 cifre arata anul recoltarii, iar ultimele 3 cifre sunt numarul de ordine al probei. Seful vrea 3 coloane separate — Categorie, An, Numar — generate automat din codul unic, fara sa retastezi manual 300 de randuri. Scrie mai jos ce crezi ca ar trebui sa faca formulele: din ce pozitie a textului ar trebui sa "taie" fiecare bucata si cate caractere ar trebui sa ia de acolo.

💡 Ai nevoie de un indiciu?

Gandeste-te la un cod postal sau la un numar de inmatriculare: fiecare grup de caractere are un inteles fix, pe o pozitie fixa. Daca stii exact pe ce pozitie incepe si cate caractere are fiecare grup, poti "decupa" bucata respectiva din text cu o formula, in loc sa o citesti si sa o retastezi cu ochii.

Subiectul lectiei de azi raspunde exact la aceasta intrebare!

1

LEN, LEFT si RIGHT — lungimea si extragerea de la capetele unui sir

Un sir de caractere este orice text stocat intr-o celula — litere, cifre, semne de punctuatie — tratat ca o secventa de caractere, nu ca o valoare cu care faci calcule aritmetice. Trei functii de baza masoara si "taie" un sir de la capetele lui:
=LEN(text) — cate caractere are textul (spatiile se numara si ele).
=LEFT(text;nr_caractere) — primele nr_caractere caractere, numarand din stanga.
=RIGHT(text;nr_caractere) — ultimele nr_caractere caractere, numarand din dreapta.
Exemplu numeric complet — cod de proba silvicultura:

Celula A2 contine textul SLV-2026-114 (fara ghilimele in celula). Refa in Excel:

=LEN(A2) → 12 (numara toate cele 12 caractere, inclusiv cele doua liniute)
=LEFT(A2;3) → SLV (primele 3 caractere)
=RIGHT(A2;3) → 114 (ultimele 3 caractere)

De ce conteaza la locul de munca:

Cand ai o coloana cu sute de coduri de forma SLV-2026-114, poti obtine automat coloana "Categorie" cu =LEFT(A2;3) tras in jos pe toate randurile, in loc sa citesti si sa retastezi manual fiecare cod. Acelasi principiu se aplica la coduri de piese, numere de inmatriculare sau coduri de proba de mediu.

2

MID — extragerea dintr-o pozitie oarecare a sirului

LEFT si RIGHT ajung doar la capetele textului. Cand ai nevoie de o bucata din mijlocul unui sir, folosesti MID:
=MID(text;pozitie_start;nr_caractere)
pozitie_start este pozitia de la care incepe extragerea (prima litera a textului este pozitia 1, nu 0), iar nr_caractere este cate caractere ia de acolo, mergand spre dreapta.
Exemplu numeric complet:

Pentru A2 = SLV-2026-114, numaram pozitia fiecarui caracter:

S(1) L(2) V(3) -(4) 2(5) 0(6) 2(7) 6(8) -(9) 1(10) 1(11) 4(12)

Anul incepe pe pozitia 5 si are 4 cifre, deci:
=MID(A2;5;4) → 2026

Greseala tipica

Cea mai frecventa greseala este numararea de pe pozitia gresita — de exemplu =MID(A2;4;4) in loc de =MID(A2;5;4). Aceasta ia 4 caractere incepand cu pozitia 4 (liniuta), deci rezultatul devine "-202" in loc de "2026" — o liniuta si trei cifre, nu anul intreg.
Cum se recunoaste: rezultatul contine un caracter care nu ar trebui sa fie acolo (liniuta, spatiu) sau ii lipseste ultima cifra.
Cum se repara: numeri cu degetul pe ecran fiecare caracter, de la 1, pana la caracterul de la care vrei sa incepi — nu presupune pozitia din memorie.

3

TRIM si CONCAT — curatarea si unirea textului

TRIM elimina spatiile de la inceputul si sfarsitul unui text si reduce spatiile duble sau triple din interior la un singur spatiu:
=TRIM(text)
CONCAT uneste mai multe texte sau valori intr-un singur sir, in ordinea in care le dai ca argumente. Acelasi lucru se poate face si cu operatorul & intre valori:
=CONCAT(text1;text2;...)  sau  =text1&text2&...
Exemplu numeric complet — curatarea unui nume introdus manual:

Celula A2 contine " Popescu Ion " (spatii in plus, ramase din copiere dintr-un alt document):
=TRIM(A2) → Popescu Ion (fara spatiile de la capete)

Exemplu numeric complet — unirea codului cu denumirea:

A2 = MEC-2025-08, B2 = Polizor unghiular:
=CONCAT(A2;" - ";B2)  sau  =A2&" - "&B2
Ambele dau acelasi rezultat: MEC-2025-08 - Polizor unghiular

Legatura cu functiile de cautare din lectia anterioara:

Un spatiu in plus, invizibil pe ecran, este exact cauza cea mai frecventa a erorii #N/A la VLOOKUP din lectia trecuta. Daca banuiesti spatii ascunse intr-o coloana folosita ca valoare de cautare, aplica =TRIM(...) intr-o coloana ajutatoare inainte de a cauta cu ea.

4

TEXT — transformarea unui numar intr-un text formatat

Cand vrei sa combini un numar cu un text intr-o singura celula (de exemplu, pentru o linie de raport), operatorul & singur nu formateaza numarul — il afiseaza brut, cu toate zecimalele lui exacte. Functia TEXT rezolva asta: transforma un numar intr-un sir de caractere, afisat exact in formatul pe care il ceri:
=TEXT(valoare;format)
In formatul cerut, 0 inseamna "aici trebuie neaparat o cifra", # inseamna "o cifra optionala", iar in Excel romanesc separatorul de mii este punctul si separatorul zecimal este virgula.
Exemplu numeric complet — linie de raport pentru un deviz:

Celula C10 contine valoarea 1234,5 (lei, rezultatul unei sume de materiale). In D10 scrii:
="Total: "&TEXT(C10;"#.##0,00")&" lei"
Rezultat: Total: 1.234,50 lei — numarul apare cu doua zecimale si cu punct la mii, gata de tiparit, in loc de "1234,5" brut.

Greseala tipica si cum o eviti:

Daca scrii direct ="Total: "&C10&" lei", fara TEXT, Excel afiseaza numarul exact cum e stocat (poate cu multe zecimale sau fara separator de mii), ceea ce arata neingrijit intr-un raport. TEXT rezolva asta impunand formatul dorit inainte de a uni textul.

5

ISBLANK, ISNUMBER, ISERROR — functii informative pentru validarea datelor

Functiile informative nu calculeaza o valoare — verifica o conditie despre continutul unei celule si raspund cu ADEVARAT sau FALS. Se folosesc aproape mereu impreuna cu functia IF, care alege intre doua rezultate posibile dupa o conditie:
=IF(conditie;valoare_daca_adevarat;valoare_daca_fals) — daca conditie este adevarata, formula intoarce valoare_daca_adevarat; altfel intoarce valoare_daca_fals.
=ISBLANK(celula) — ADEVARAT daca celula este complet goala.
=ISNUMBER(celula) — ADEVARAT daca celula contine o valoare numerica.
=ISERROR(celula) — ADEVARAT daca celula (sau formula din ea) da orice tip de eroare (#N/A, #DIV/0!, #VALUE! etc.).
=IFERROR(formula;valoare_daca_eroare) — varianta scurta: calculeaza formula si, daca aceasta da eroare, intoarce valoare_daca_eroare in loc de simbolul de eroare, fara sa mai fie nevoie de un IF si un ISERROR separate.
Exemplu — verificarea completarii unei coloane:

Coloana B contine masuratori care ar trebui completate pe fiecare rand. In C2:
=IF(ISBLANK(B2);"Lipsa masuratoare";"OK")
Daca B2 e goala, apare "Lipsa masuratoare"; altfel apare "OK" — util pentru a gasi rapid randurile necompletate dintr-un tabel mare.

Exemplu numeric complet — evitarea erorii #DIV/0! la un calcul pe hectar:

C2 contine formula =A2/B2 (A2 = Volumul, B2 = Suprafata parcelei), dar la o parcela B2 este 0, deci C2 afiseaza #DIV/0!. In D2:
=IF(ISERROR(C2);"Nu se poate calcula";C2)
Cand C2 e o eroare, D2 arata "Nu se poate calcula" in loc de simbolul de eroare. Exista si o varianta mai scurta, =IFERROR(A2/B2;"Nu se poate calcula"), care face acelasi lucru intr-un singur pas, mai concis decat sa scrii separat un IF si un ISERROR.

Exemplu — verificarea tipului de date la introducere:

O coloana ar trebui sa contina numai numere, dar cineva a scris din greseala un text intr-o celula (de exemplu "opt" in loc de 8). In coloana de verificare:
=IF(ISNUMBER(B2);"Valid";"Verifica - nu e numar")

6

PMT si FV — notiuni de functii financiare

Functiile financiare calculeaza automat marimi legate de imprumuturi si economii, plecand de la o dobanda constanta pe fiecare perioada. PMT (Payment) calculeaza rata periodica (de obicei lunara) pentru un credit. FV (Future Value) calculeaza valoarea viitoare a unui sir de depuneri periodice egale, cu dobanda. La ambele, Excel foloseste conventia semnelor: banii care intra in cont sunt pozitivi, banii care ies din cont sunt negativi.
Rezultatele lor au de obicei multe zecimale, de aceea apar aproape mereu rotunjite cu =ROUND(numar;nr_zecimale) — rotunjeste numar la nr_zecimale zecimale. Cand ai nevoie de rezultat ca numar pozitiv (de exemplu ca sa il inmultesti mai departe intr-un alt calcul), foloseste =ABS(numar) — intoarce valoarea absoluta, fara semn.
PMT — rata unui credit. Sintaxa:

=PMT(rata;nr_perioade;valoare_prezenta;[valoare_viitoare];[tip])
rata — dobanda PE PERIOADA (daca dobanda anuala e platita lunar, se imparte la 12).
nr_perioade — numarul total de plati.
valoare_prezenta — suma imprumutata, introdusa ca numar pozitiv.

Exemplu numeric complet — credit pentru un compresor de atelier:

Atelierul ia un credit de 20.000 lei, dobanda anuala 8%, rambursat in 36 de rate lunare egale. Rata lunara:
=ROUND(PMT(8%/12;36;20000);2) → -626,73
Rata lunara este 626,73 lei; semnul minus arata ca banii ies din contul atelierului la fiecare plata. Daca ai nevoie de rata ca numar pozitiv, pentru a o folosi mai departe (de exemplu inmultind-o cu numarul de rate ca sa afli totalul platit), infasoara formula in ABS: =ABS(ROUND(PMT(8%/12;36;20000);2)) → 626,73.

FV — valoarea viitoare a unei economii. Sintaxa:

=FV(rata;nr_perioade;plata;[valoare_prezenta];[tip]) — plata este suma depusa la fiecare perioada, introdusa ca numar negativ (banii ies din buzunarul tau si intra in cont).

Exemplu numeric complet: Un elev depune 100 lei in fiecare luna intr-un cont de economii cu dobanda anuala 4%, timp de 24 de luni:
=ROUND(FV(4%/12;24;-100);2) → 2494,29
Din cei 2.400 lei depusi in total (100 × 24 luni), dobanda a adaugat 94,29 lei.

7

Functii definite de utilizator — cand niciuna dintre cele predefinite nu ajunge

O functie definita de utilizator (UDF — User Defined Function) este o functie proprie, scrisa de tine in VBA (Visual Basic for Applications, limbajul de programare integrat in Excel), pe care apoi o folosesti intr-o celula exact ca pe SUM sau VLOOKUP. Se foloseste cand ai un calcul cu o regula specifica, repetata pe multe randuri, pe care nicio functie predefinita nu o acopera direct.
Pasii, in ordine, pentru a scrie si folosi o functie proprie:

1. Deschide fisierul Excel cu datele tale.
2. Apasa Alt+F11 — se deschide editorul VBA.
3. In panoul din stanga (Project Explorer), click-dreapta pe numele proiectului (VBAProject) → Insert → Module.
4. In fereastra de cod aparuta, scrie functia (vezi codul de mai jos).
5. Inchide editorul VBA (butonul X din colt, sau Alt+Q) si revino in Excel.
6. Salveaza fisierul in format .xlsm (Excel Macro-Enabled Workbook) din File → Save As, alegand acest tip de fisier.
7. Intr-o celula, scrie numele functiei tale, ca pe orice alta formula.

Exemplu de cod — incadrarea unei masuratori fata de o valoare de referinta:
Function IncadrareProba(valoare As Double, limitaAdmisa As Double) As String
    If valoare > limitaAdmisa Then
        IncadrareProba = "Peste limita"
    Else
        IncadrareProba = "In limita"
    End If
End Function

Aceasta functie primeste doua numere (valoare si limitaAdmisa) si returneaza un text: "Peste limita" sau "In limita". limitaAdmisa este aici un exemplu didactic, dat ca parametru — intr-o situatie reala, pragul exact vine din normativul aplicabil domeniului, nu se stabileste arbitrar.

Apelarea functiei din foaie:

Dupa ce ai salvat codul, in celula A2 ai valoarea masurata (ex. 42) si in B2 limita de referinta (ex. 35, exemplu didactic). In C2 scrii:
=IncadrareProba(A2;B2)
Rezultat: Peste limita — Excel apeleaza automat codul tau VBA, exact cum ar apela SUM sau IF.

Greseala tipica

Scrii functia, o testezi, functioneaza — apoi salvezi fisierul normal (Ctrl+S) fara sa observi fereastra de avertizare, iar Excel il salveaza tot ca .xlsx, pierzand codul VBA. Cum se recunoaste: data viitoare cand deschizi fisierul, formula ta apare ca #NAME? — Excel nu mai stie ce este "IncadrareProba". Cum se repara: foloseste explicit File → Save As si alege tipul de fisier "Excel Macro-Enabled Workbook (*.xlsm)"; daca apare fereastra de avertizare la Save cu Ctrl+S, alege "No" si salveaza cu formatul corect.

Exercitii practice

Exercitiul 1 (Nivel minim) — Desfacerea unui cod de proba

Ai urmatoarele coduri de proba, cate unul in celulele A2, A3 si A4: PMD-2026-045 (protectia mediului), MEC-2025-08 (mecanica) si SLV-2026-114 (silvicultura). Structura codului este: primele 3 litere = categorie, urmatoarele 4 cifre = anul, ultimele cifre (dupa a doua liniuta) = numarul de proba. Pentru celula A4 (SLV-2026-114), scrie cate o formula pentru: a) lungimea totala a textului; b) categoria (primele 3 caractere); c) anul (4 cifre din mijloc); d) numarul de proba (ultimele 3 caractere).

Vezi rezolvarea

Date: A4 = SLV-2026-114 (12 caractere).

  1. a) Lungime: =LEN(A4) -> 12.
  2. b) Categorie (primele 3 caractere): =LEFT(A4;3) -> SLV.
  3. c) Anul (4 cifre din mijloc, incepe pe pozitia 5): =MID(A4;5;4) -> 2026.
  4. d) Numarul de proba (ultimele 3 caractere): =RIGHT(A4;3) -> 114.

Verificare pozitii: S(1)L(2)V(3)-(4)2(5)0(6)2(7)6(8)-(9)1(10)1(11)4(12) - anul incepe exact pe pozitia 5, dupa prima liniuta.

Exercitiul 2 (Nivel standard) — Curatarea si formatarea unei linii de raport

Intr-un tabel de evidenta, celula B5 contine numele tehnicianului scris cu spatii in plus: " Ionescu Radu ", iar celula C5 contine costul unei interventii, 875,4 (lei). Celula D5 (data interventiei) este momentan goala. a) Scrie o formula care elimina spatiile in plus din B5. b) Scrie o formula care construieste linia de raport "Ionescu Radu — 875,40 lei", combinand numele curatat (fara spatii) cu costul formatat pe doua zecimale. c) Scrie o formula care afiseaza "Lipsa data" daca D5 este goala, si "OK" in caz contrar.

Vezi rezolvarea

Date: B5 = " Ionescu Radu " (cu spatii in plus), C5 = 875,4 lei, D5 goala.

  1. a) Curatare: =TRIM(B5) da Ionescu Radu (fara spatiile de la capete).
  2. b) Linie de raport: =TRIM(B5)&" — "&TEXT(C5;"#.##0,00")&" lei" da exact Ionescu Radu — 875,40 lei. Intre ghilimele se scrie chiar caracterul cerut in enunt, linia de pauza (—), nu cratima obisnuita: daca scrii " - ", formula ruleaza, dar textul obtinut nu este identic cu cel cerut. Linia de pauza se obtine tinand apasat Alt si tastand 0151 pe blocul numeric din dreapta, sau copiind caracterul direct din enunt. TEXT(C5;"#.##0,00") transforma 875,4 in textul 875,40, cu doua zecimale exacte.
  3. c) Verificare data: =IF(ISBLANK(D5);"Lipsa data";"OK"): D5 fiind goala, ISBLANK(D5) da ADEVARAT, deci rezultatul afisat este Lipsa data.

Exercitiul 3 (Nivel performanta) — Credit pentru utilaj si functie proprie de incadrare

O firma de mecanica auto cumpara un elevator hidraulic printr-un credit de 15.000 lei, cu dobanda anuala 7%, rambursat in 24 de rate lunare egale. a) Calculeaza rata lunara cu functia PMT, rotunjita la 2 zecimale. b) PMT intoarce rata cu semnul minus (banii ies din cont) — foloseste ABS() ca sa obtii rata ca numar pozitiv, apoi calculeaza totalul platit dupa cele 24 de rate (rata pozitiva × 24) si dobanda totala platita (totalul minus 15.000). c) Dupa modelul functiei IncadrareProba din lectie, scrie o functie proprie de utilizator IncadrareCost(dobandaTotala As Double, valoareCredit As Double) As String, care returneaza "Cost acceptabil" daca dobanda totala este mai mica de 10% din valoarea creditului, si "Cost ridicat" in caz contrar. Aplic-o rezultatului de la punctul b) si scrie ce raspuns ar da.

Vezi rezolvarea

Nivel performanta - schita, nu rezultatul final calculat:

  1. a) Structura: =ROUND(PMT(0,07/12;24;15000);2) - dobanda anuala trebuie impartita la 12 ca sa devina rata PE PERIOADA (lunara), pentru ca cele 24 de perioade sunt luni, nu ani. Calculeaza singur valoarea rezultata.
  2. b) Rata pozitiva: =ABS(celula_PMT); totalul platit = rata_pozitiva*24; dobanda totala = total_platit-15000. Verifica cu bunul simt: dobanda totala trebuie sa fie o suma rezonabila, mult mai mica decat suma imprumutata.
  3. c) Functia proprie in VBA, dupa modelul din lectie: Function IncadrareCost(dobandaTotala As Double, valoareCredit As Double) As String, cu un If dobandaTotala < 0.1 * valoareCredit Then care alege intre cele doua texte cerute.

Capcana: rata PMT iese negativa (bani care ies din cont) - daca uiti ABS la calculul totalului, totalul platit iese negativ si dobanda totala gresita. Criteriu de evaluare: dobanda calculata la punctul b) e comparata corect cu pragul de 10% din 15.000 lei (adica 1.500 lei) in functia de la punctul c).

Ce ai invatat astazi

  • LEN(text) numara caracterele; LEFT(text;n) si RIGHT(text;n) extrag n caractere de la inceput, respectiv de la sfarsit
  • MID(text;pozitie_start;n) extrage n caractere incepand de la o pozitie oarecare din mijlocul textului (numaratoarea incepe de la 1)
  • TRIM elimina spatiile in plus; CONCAT sau operatorul & unesc mai multe texte intr-un singur sir
  • TEXT(valoare;format) transforma un numar in text formatat, gata de combinat cu alt text intr-un raport
  • ISBLANK, ISNUMBER si ISERROR verifica o conditie despre continutul unei celule si dau ADEVARAT/FALS, folosite de obicei cu IF pentru validare
  • PMT calculeaza rata periodica a unui credit; FV calculeaza valoarea viitoare a unor depuneri periodice — ambele cu rata dobanzii pe perioada, nu pe an
  • O functie definita de utilizator se scrie in VBA (Alt+F11 → Insert → Module), se salveaza in format .xlsm si se apeleaza dintr-o celula ca orice alta functie

Vrei mai mult?

MID cu pozitie fixa merge doar cand toate codurile au aceeasi structura. Cand nu, ai nevoie de FIND (functie neintrodusa in lectie) ca sa gasesti singura pozitia unei liniute.

  • Provocare: codurile din lectie (SLV-2026-114, MEC-2025-08) au toate 3 litere inainte de prima liniuta, deci MID(A2;5;4) merge mereu. Dar la un cod cu 2 litere, ca "PM-2026-045", pozitia se schimba. Scrie =FIND("-";A2) ca sa gasesti pozitia primei liniute, apoi =MID(A2;FIND("-";A2)+1;4) ca sa extragi anul indiferent de lungimea prefixului. Testeaza pe ambele coduri.
  • De ce? PMT da rezultatul cu semn NEGATIV cand valoarea_prezenta (creditul) e un numar pozitiv. Ce s-ar intampla cu semnul rezultatului daca ai introduce creditul ca numar negativ in formula?
  • Deschidere: exact aceste trei categorii de functii — text, financiare, functii proprii VBA — stau la baza automatizarii rapoartelor intr-un job de contabilitate sau analiza de date: cine stie sa scrie o functie UDF proprie nu mai depinde de un programator pentru fiecare calcul special aparut intr-un raport nou.

Ai terminat modulul Functii Predefinite si Functii Utilizator

Ai parcurs toate cele 4 lectii: functii aritmetice si statistice, functii logice, functii de cautare si referinta, iar acum functii pe siruri, functii financiare si functii proprii. Intoarce-te la cuprinsul modulului pentru a revedea oricare dintre lectii sau pentru a trece la urmatorul modul.

Inapoi la modul →