Sunt la un curs de Excel și mi-a venit în cap o problemă faină, zic eu, de Excel.
Așa că m-am gândit să o aduc în atenția voastră și să vă provoc la o rezolvare.
Rezultatele trebuie trimise prin e-mail la valygreavu [at] hotmail.com până joi, 13 septembrie ora 22:00.
UPDATE: Trimitere rezultate încheiată! Soluția câștigătoare:
=IF((LEFT(RIGHT(A2;3))=”.”);RIGHT(A2;2);RIGHT(A2;3))
Domeniu | |
x@yahoo.com | com |
y@yahoo.ro | ro |
j@hotmail.com | com |
m@x.jp | jp |
m@yyyy.com | com |
x@yahoo.com | com |
y@yahoo.ro | ro |
j@hotmail.com | com |
m@x.fr | fr |
m@yyyy.mx | mx |
j@hotmail.com | com |
m@x.jp | jp |
m@yyyy.com | com |
Link public la fisierul Excel cu soluțiile propuse: https://skydrive.live.com/redir?resid=6EC38785F56DAE91!2715
Cerința: Care este formula prin care obțineți valorile din dreapta?
Pentru clarificări dați comentarii. Pentru rezolvitori dați soluția pe mail. Cea mai bună soluție va fi publicată.
[UPDATE 14.09.2012 h 00:10]
Cea mai rapida solutie a venit de la Mircea P: =RIGHT(A2; LEN(A2)-SEARCH(„.”; A2; 1)) Foarte buna in contextual datelor, dar nu general valabila in contextual adreselor de tip: prenume.nume@domeniu.co.jp
Altă soluție: =MID(A2, FIND(„.”, A2) + 1, 4) nu se aplică în contextual adresei de mai sus.
Viorel L care mi-a fost student, dar nu la Excel, a spus ca problema este simpla. Si a venit cu formula: =RIGHT(A2;LEN(A2)-SEARCH(„.”;A2)) Normal ca nefunctionala pentru toate tipurile de adrese valabile de mail.
Alina C. a venit cu formula pe care o aveam si eu in minte: =IF((LEFT(RIGHT(A2;3))=”.”);RIGHT(A2;2);RIGHT(A2;3)) Se vede ca mi-a fost studenta si a facut Excel cu mine, chiar dacă la orele cu ei nu am facut așa ceva, se pare că a înțeles metoda :)
Ionut S. a vrut sa fie altfel si a trimis o solutie prin care sa scoti domeniul de mail nu domeniul de root. Formula lui arata: =LEFT(RIGHT(A2;LEN(A2)-FIND(„@”;A2));FIND(„.”;RIGHT(A2;LEN(A2)-FIND(„@”;A2)))-1) si se pare ca merge pe mai multe tipuri de adrese. De fapt pe toate pe care le-am testat eu, chiar dacă soluția originală nu este funcțională pentru a scoate domeniile de tara: =RIGHT(A2;LEN(A2)-FIND(„.”;A2))
Aceași soluție nefuncțională cu Right la început a mai venit de la alți concurenți, bună pentru exemplul dar, dar nu pentru toate adresele de e-mail valabile.
Simona C. a dat soluția corectă folosind aceeași formula ca Alina C. Si Simona a trecut pe la orele mele… deja devin suspicios.
Ovidiu D, a obținut rezultate destul de interesante în prima versiune, dar nu suficient de exacte. Formula lui: =RIGHT(A2;LEN(A2)-FIND(„.”;A2;FIND(„@”;A2;1))).
În ordinea mesajelor mi-a mai scris și Ala Posta, o soluție cu Viagra… dar nu se aplică în cadrul problemei curente :)
Ovidiu D a mai venit cu o soluție bazată pe array-uri. Din păcate formula: {=RIGHT(A2:A16;LEN(A2:A16)-FIND(„.”;A2:A16;FIND(„@”;A2:A16;1)))} returnează același rezultat, inexact ca cel al formulei de mai sus.
Mihai P a trimis o altă formă de RIGHT cu trim-uri =TRIM(RIGHT(A2;LEN(A2)-FIND(„.”;A2))) O menționez pentru că TRIM-urile pot avea un rol bun în lucrul cu șiruri… din păcate soluția se aplică doar pe datele de test nu și pe toate celelalte adrese de e-mail valabile.
Catalin D aplica un fel de hard-code prin formula sa: =MID(A2;SEARCH(„.”;A2;SEARCH(„@”;A2)+1)+1;6) Nu am înțeles cum a obținut acea valoare 6 din search, dar pare destul de matematizat pentru că ies destul de multe cazuri corect la iveala.
Andreea A propune asa după cum spune și ea o soluție mai băbească… care arată cam așa: =RIGHT(RIGHT(A2; LEN(A2)-FIND(„@”; A2)); LEN(RIGHT(A2; LEN(A2)-FIND(„@”; A2)))-FIND(„.”; RIGHT(A2; LEN(A2)-FIND(„@”; A2))))
Mie mi-a plăcut pentru că este lungă și drăguță… are atât de multe paranteze… :)))
Și în ordinea lor încă vre-o două mesaje cu right șiiii mid și right și len și search…
De departe în schimb cea mai lungă formulă îi aparține lui Constantin S:
=RIGHT(RIGHT(A2;LEN(A2) – SEARCH(„@”;A2)); LEN(RIGHT(A2;LEN(A2) – SEARCH(„@”;A2))) – SEARCH(„.”;RIGHT(A2;LEN(A2) – SEARCH(„@”;A2)))) Nefuncțională complet din păcate…
Așa cum îmi imaginam, Alexandru D. de la www.tutorialeoffice.ro a trimis cele mai multe și mai variate soluții de rezolvare a problemei cu datele de test prezentate. Din păcate nu toate exacte… făcând aceeași omisiune ca majoritatea, aceea de a rezolva problema fără a parcurge corect pașii: analiză, proiectare, implementare, testare, documentare și utilizare.
Aparent pare simplă problema dar metodologia de lucru în rezolvarea problemelor în Excel este să poți rezolva toate problemele de același tip sau cu diferite seturi de date, utilizând o singură formulă.
Felicitări Alinei și Simonei pentru soluție. Nu știu dacă este suficient pentru ele să știe că au reușit… să dea soluția corectă… pentru că trebuie să se mulțumească cu asta momentan. :)
Mulțumesc pentru implicare și sper că va plăcut!
PS. Vă provoc la o regulă de 3 simple sau la o ecuație de gradul 2 în Excel? :)
nu merge cu text to columns?
ApreciazăApreciază
@Diana. Nu merge solutia cu text to columns. Nu este viabila. Considera ca in exemplul meu este doar un punct. Intr-o adresa reala pot fi cel putin doua.
ApreciazăApreciază
N-ar fi mai bine daca ar exista un punct si inaintea @-ului? Gen x.y@yahoo.com
ApreciazăApreciază
In general pot exista mai multe puncte. De exemplu la noi este asa: prenume.nume@feaa.uaic.ro…
ApreciazăApreciază
Nice.
ApreciazăApreciază
=IF(ISERROR(FIND(„@”,C2)),””,TRIM(MID(C2,FIND(„@”, C2)+1,LEN(C2))))
=IF(ISERROR(FIND(„.”,C2)),””,TRIM(MID(C2,FIND(„.”, C2)+1,LEN(C2))))
ApreciazăApreciază
Bad Cosmin. Bad pentru ca ai publicat aici… :)
ApreciazăApreciază
cosmin, nu prea merge daca emailul e de forma nume.prenume.
ApreciazăApreciază
Functioneaza pentru orice tip de mail. Doar ca ai nevoie de 2 coloane, prima pentru rezultate partiale si a doua pentru cele finale. :)
ApreciazăApreciază
x.y@mail.domeniu.com
x@domeniu.co.uk
etc…
ApreciazăApreciază
Fara coloane suplimentare!
ApreciazăApreciază
Parca trebuia pe mail rezolvarea
ApreciazăApreciază
Oops…
ApreciazăApreciază
Solutia de mai jos cum vi se pare?
=IF(LEFT(RIGHT(C7;3))=”.”;RIGHT(C7;2);RIGHT(C7;3))
ApreciazăApreciază
Simona este si solutia mea… deci chiar daca pare complicata e cea mai sigura pentru toate tipurile de .ceva in care len(ceva)=3 :)
ApreciazăApreciază
dar daca vine .ro mai merge cu len=3 ?
ApreciazăApreciază
@Lupu normal că merge.
Şi dacă ai .info după domeniu, modifici argumentul lui LEN.
Ca să fii sigur poţi să pui Len(x)=255
Acum, după punct poţi să ai orice, dar rezultatul va fi doar porţiunea vizibilă de text.
ApreciazăApreciază
Te-ai complicat cu acel IF.
Totuşi la fel de complicată este şi soluţia mea:
SELECT `Info$`.Email, Mid(`Info$`.Email,InStr(`Info$`.Email,\’.\’)+1) AS \’Domeniu\’ FROM `C:\\Valy\\Sursa.xlsx`.`Info$` `Info$`
Asta ca să mă dau mare şi aici. :))
P.S. Este tot pentru Excel.
ApreciazăApreciază
Protestez! Formula castigatoare este gresita pentru ca intoarce pentru prenume.nume@domeniu.co.jp domeniul .jp in loc de .co.jp
Revin cu o versiune enhanced si corecta a solutiei mele:
=RIGHT(RIGHT(A2,LEN(A2)-SEARCH(„@”,A2,1)),LEN(RIGHT(A2,LEN(A2)-SEARCH(„@”,A2,1)))-SEARCH(„.”,RIGHT(A2,LEN(A2)-SEARCH(„@”,A2,1)),1))
ApreciazăApreciază
Multumesc. Asa mai invat si eu cate ceva. :)
ApreciazăApreciază
sau co.jp nu e domeniu?
ApreciazăApreciază
e subdomeniu, shit! e ca voi, dar nu merge cu .info
ApreciazăApreciază
Formula de mai jos ar trebui sa rezolve problema cu domeniile de tip „.info”.
=IF(LEFT(RIGHT(E32,5))=”.”,RIGHT(E32,4),IF(LEFT(RIGHT(E32,3))=”.”,RIGHT(E32,2),RIGHT(E32,3)))
Se complica, e adevarat, dar rezolva problema.
ApreciazăApreciază
=IF(LEFT(RIGHT(E32,5))=”.”,RIGHT(E32,4),IF(LEFT(RIGHT(E32,3))=”.”,
RIGHT(E32,2),RIGHT(E32,3)))
(am „lipit-o” din nou pentru ca mai sus vad ca nu a iesit completa)
ApreciazăApreciază
Acum, Doamne-ajuta sa nu apara domenii cu mai mult de 4 caractere ca am imbulinat-o! :))
ApreciazăApreciază
eu ma zis ca e simpla pentru setul respectiv de date:))
ApreciazăApreciază
Corect :)
ApreciazăApreciază
Cum adica nu este functionala solutia originala? Am retestat-o acum, chestia asta =RIGHT(A2,LEN(A2)-FIND(„.”,A2)) functioneaza indiferent de numarul de caractere de dupa „.” La ce nume de tara nu a returnat corect?
ApreciazăApreciază
In cazul adreselor de genul nume.prenume@yahoo.com, formula =RIGHT(E19,LEN(E19)-FIND(„.”,E19)) returneaza rezultatul prenume@yahoo.com.
ApreciazăApreciază
Mersi Simona, acum am vazut documentul… Am omis nume.prenume :)
ApreciazăApreciază
Până la urmă:
„Care este formula prin care obțineți valorile din dreapta?”
A cui este vina că participanţii şi-au adaptat formulele doar pentru tabelul acela ? :D
P.S. Felicitări câştigătorilor !
ApreciazăApreciat de 1 persoană
Cel mai precis se rezolva cu regex si VB. Extragi textul din dreapta ultimului punct care mai are dupa el minim doua caractere; eventual il compari intr-un vlookup cu un alt tabel unde ai toate tld-urile
ApreciazăApreciază
Şi ca să fii pe gustul lui Valy, tot acel cod VBA îl transformai într-o funcţie volatilă şi apoi te numărai printre câştigători. :D
ApreciazăApreciază
Iata inca o formula pentru problema:
=RIGHT(D2,LEN(D2)-FIND(„|”,SUBSTITUTE(D2,”.”,”|”,LEN(D2)-LEN(SUBSTITUTE(D2,”.”,””)))))
ApreciazăApreciază
Ce ne facem cand avem: nume.prenume@test.info? Solutia aleasa de dumneavoastra va returne „nfo” which is wring :).
Propun:
=IFERROR(RIGHT(A2,LEN(A2)-FIND(„|”,SUBSTITUTE(A2,”.”,”|”,LEN(A2)-LEN(SUBSTITUTE(A2,”.”,””))))),””)
ApreciazăApreciază
Foloseste formula mea:
=RIGHT(D2,LEN(D2)-FIND(„|”,SUBSTITUTE(D2,”.”,”|”,LEN(D2)-LEN(SUBSTITUTE(D2,”.”,””)))))
merge si pentru .info
ApreciazăApreciază
Nu a incaput formula in comentariu asa ca adaug doar ce lipseste urmand a se concatena stringurile pentru verificare :)
E(A2,”.”,””))))),””)
ApreciazăApreciază
=IF(ISERROR(FIND(„.”,A2,FIND(„.”,A2,FIND(„@”,A2,1))+1)),RIGHT(A2,LEN(A2)-FIND(„.”,A2,FIND(„@”,A2,1))),RIGHT(A2,LEN(A2)-FIND(„.”,A2,FIND(„.”,A2,FIND(„@”,A2,1))+1)))
ApreciazăApreciază
sau
=CHOOSE(LEN(RIGHT(A2,LEN(A2)-FIND(„@”,A2)))-LEN(SUBSTITUTE(RIGHT(A2,LEN(A2)-FIND(„@”,A2)),”.”,””)),RIGHT(A2,LEN(A2)-FIND(„.”,A2,FIND(„@”,A2,1))),RIGHT(A2,LEN(A2)-FIND(„.”,A2,FIND(„.”,A2,FIND(„@”,A2,1))+1)),RIGHT(A2,LEN(A2)-FIND(„.”,A2,1+FIND(„.”,A2,FIND(„.”,A2,FIND(„@”,A2,1))+1))))
Formula cistigatoare pica la
prenume.nume@feaa.uaic.info
ApreciazăApreciază
Tare!!! :) Dar ai depasit timpul. Te astept in rereuri! :)))
ApreciazăApreciază