search intr-un range
Re: search intr-un range
Salut again,
Pls, se pare ca am multe valori in celula in care se cauta valorile din range:(
Formula este perfecta, insa pls se pot returna toate valorile identificate in range?
Multumesc
Pls, se pare ca am multe valori in celula in care se cauta valorile din range:(
Formula este perfecta, insa pls se pot returna toate valorile identificate in range?
Multumesc
Re: search intr-un range
Cu formule cred ca este foarte greu, sau ar fi o formula "kilometrica" sau una nu foarte usor de depanat. Un cod VBA sau o functie UDF cred ca ar fi mai usor.
Re: search intr-un range
Ce ar trebui să conțină acea funcție?Mharoco scrie:[...]Un cod VBA sau o functie UDF cred ca ar fi mai usor.
- argumentele funcției: fraza în care se caută; zona nomenclator; separatorul de listă; textul care să apară când nu se găsește nimic.
- rezolvarea erorilor
- o buclă: pentru fiecare element din nomenclator
- dacă se găsește elementul în frază, se înmagazinează în rezultat (concatenare cu tot cu separator)
- dacă nu se găsește, nu se face nimic - la ieșirea din buclă
- dacă nu s-a găsit nimic, funcția afișează textul pentru "negăsit"
- dacă s-a găsit măcar un element, se elimină ultimul separator și spațiul
Am cârpit ceva, dar așa... ca un începător.
Codul e pus într-un Add-In (.xlam), ceea ce înseamnă că va putea fi folosit și în alte situații.
Cod: Selectaţi tot
Option Explicit
Function gaseste(fraza As String, zona_nomenclator As Range, separator_lista As String, text_rezultat_negativ As String) As String
Dim cell As Range
On Error GoTo RezolvEroare
gaseste = ""
For Each cell In zona_nomenclator
If InStr(UCase(fraza), UCase(cell.Value)) <> 0 Then gaseste = gaseste & cell.Value & separator_lista & " "
Next cell
If gaseste = "" Then
gaseste = text_rezultat_negativ
Else
gaseste = Left(gaseste, Len(gaseste) - 2)
End If
Exit Function
RezolvEroare:
gaseste = "!!!! EROARE !!!!"
End Function
Cod: Selectaţi tot
=gaseste(A2;nomenclator;";";"-")
Până la urmă tot voi învăța să NU mai scriu pe internet cât timp nu știu să comunic cu oamenii.
Re: search intr-un range
@iji,
nu stiu cum sa interpretez:
Avem pe-aici programatori în VBA?
Ca nou forumist era "normal" sa te fi uitat la cateva (sa nu spun, studiat, anumite raspunsuri) postari de pe aici...
si ca, nu ai gasit niciun cod ceva care sa se ridice la nivelul tau sau al asteptarilor tale...si de aici intrebarea:
Avem pe-aici programatori în VBA?
Bine ai venit, sa ne scoti din nevoie!
In consecinta ai postat un Add-in (.xlsm) care sa caute anumite cuvinte intro fraza.
Cu umila recunostinta va atrag atentia ca aveti cate un spatiu dupa fiecare ultim cuvant gasit (daca ar fi dupa mine nici semnul acesta ";", nu ar avea ce cauta dupa ultimul cuvant.)
Dupa "indelungi" cautari am gasit o solutie la problema:
in loc de:
gaseste = Left(gaseste, Len(gaseste) - 2)
as folosi ori:
gaseste = Left(gaseste, Len(gaseste) - 3) - acesta va elimina spatiul de dupa ultimul cuvant
ori:
gaseste = Left(gaseste, Len(gaseste) - 4) - acesta va elimina semnul ";" si spatiul de dupa ultimul cuvant
Mii de multumiri ca doriti sa ne ajutati.
nu stiu cum sa interpretez:
Avem pe-aici programatori în VBA?
Ca nou forumist era "normal" sa te fi uitat la cateva (sa nu spun, studiat, anumite raspunsuri) postari de pe aici...
si ca, nu ai gasit niciun cod ceva care sa se ridice la nivelul tau sau al asteptarilor tale...si de aici intrebarea:
Avem pe-aici programatori în VBA?
Bine ai venit, sa ne scoti din nevoie!
In consecinta ai postat un Add-in (.xlsm) care sa caute anumite cuvinte intro fraza.
Cu umila recunostinta va atrag atentia ca aveti cate un spatiu dupa fiecare ultim cuvant gasit (daca ar fi dupa mine nici semnul acesta ";", nu ar avea ce cauta dupa ultimul cuvant.)
Dupa "indelungi" cautari am gasit o solutie la problema:
in loc de:
gaseste = Left(gaseste, Len(gaseste) - 2)
as folosi ori:
gaseste = Left(gaseste, Len(gaseste) - 3) - acesta va elimina spatiul de dupa ultimul cuvant
ori:
gaseste = Left(gaseste, Len(gaseste) - 4) - acesta va elimina semnul ";" si spatiul de dupa ultimul cuvant
Mii de multumiri ca doriti sa ne ajutati.
Re: search intr-un range
-2 din formulă exact asta face -> elimină ; și spațiul
întrebarea cu programatorii se referea la viitor, nu la trecut.
adică îmi exprimam speranța că va veni cineva care se pricepe
și care să zică ce reguli de bună practică am încălcat cu acel cod.
am deranjat fără să fie intenția mea.
întrebarea cu programatorii se referea la viitor, nu la trecut.
adică îmi exprimam speranța că va veni cineva care se pricepe
și care să zică ce reguli de bună practică am încălcat cu acel cod.
am deranjat fără să fie intenția mea.
Până la urmă tot voi învăța să NU mai scriu pe internet cât timp nu știu să comunic cu oamenii.
Re: search intr-un range
Puteai sa spui asa, decat sa intrebi:întrebarea cu programatorii se referea la viitor, nu la trecut. adică îmi exprimam speranța că va veni cineva care se pricepe
și care să zică ce reguli de bună practică am încălcat cu acel cod.
Avem pe-aici programatori în VBA?
Nu. nu face asta. Reciteste codul sau testeaza codul.-2 din formulă exact asta face -> elimină ; și spațiul
Re: search intr-un range
De două zile chiar o folosesc ca să definesc taguri și nu îmi pune ; și spațiu la sfârșit pentru cod cu -2.Indigo scrie:Reciteste codul sau testeaza codul.
În schimb, nu observasem o problemă care nu apărea pentru țările testate (oarecum speciale în limba română, ex. Cehia > ceh, cehesc; Finlanda > finlandez),
dar apare pentru alte țări (ex. "Maroc" > "marocan") și la taguri: pentru "know" găsește și "unknown, acknowledge", ceea ce e neplăcut.
Până la urmă tot voi învăța să NU mai scriu pe internet cât timp nu știu să comunic cu oamenii.
Re: search intr-un range
Cod: Selectaţi tot
Function gaseste(fraza As String, zona_nomenclator As Range, separator_lista As String, text_rezultat_negativ As String) As String
Dim cell As Range
On Error GoTo RezolvEroare
gaseste = ""
For Each cell In zona_nomenclator
' If InStr(UCase(fraza), UCase(cell.Value)) <> 0 Then gaseste = gaseste & cell.Value & separator_lista & " " 'problema: gaseste "Maroc" in "marocan"
If reFindWord(cell.Value, fraza) <> 0 Then gaseste = gaseste & cell.Value & separator_lista & " " 'rezolva problema "Maroc", dar dureaza foarte mult pana intoarce rezultatul
Next cell
If gaseste = "" Then
gaseste = text_rezultat_negativ
Else
gaseste = Left(gaseste, Len(gaseste) - 2)
End If
Exit Function
RezolvEroare:
gaseste = "!!!! EROARE !!!!"
End Function
Function reFindWord(FindWord As String, SearchText As String, Optional MatchCase As Boolean = False) As Boolean
'functie postata de Ron Rosenfeld pe http://stackoverflow.com/questions/28100969/excel-exact-word-matching
Dim RE As Object
Dim sPattern As String
Set RE = CreateObject("vbscript.regexp")
sPattern = "\b" & FindWord & "\b"
With RE
.Pattern = sPattern
.ignorecase = Not MatchCase
reFindWord = .test(SearchText)
End With
End Function
Până la urmă tot voi învăța să NU mai scriu pe internet cât timp nu știu să comunic cu oamenii.
Re: search intr-un range
am mutat funcția în fișier
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Până la urmă tot voi învăța să NU mai scriu pe internet cât timp nu știu să comunic cu oamenii.