Problemă cu șiruri in Excel


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))

Email 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? :)

 

42 de gânduri despre „Problemă cu șiruri in Excel

    1. @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ă

  1. =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ă

    1. Functioneaza pentru orice tip de mail. Doar ca ai nevoie de 2 coloane, prima pentru rezultate partiale si a doua pentru cele finale. :)

      Apreciază

    1. 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ă

      1. @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ă

  2. 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ă

  3. 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ă

    1. 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ă

  4. =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ă

  5. 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ă

  6. 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ă

  7. Iata inca o formula pentru problema:

    =RIGHT(D2,LEN(D2)-FIND(„|”,SUBSTITUTE(D2,”.”,”|”,LEN(D2)-LEN(SUBSTITUTE(D2,”.”,””)))))

    Apreciază

  8. 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ă

    1. Foloseste formula mea:

      =RIGHT(D2,LEN(D2)-FIND(„|”,SUBSTITUTE(D2,”.”,”|”,LEN(D2)-LEN(SUBSTITUTE(D2,”.”,””)))))

      merge si pentru .info

      Apreciază

  9. Nu a incaput formula in comentariu asa ca adaug doar ce lipseste urmand a se concatena stringurile pentru verificare :)

    E(A2,”.”,””))))),””)

    Apreciază

  10. =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ă

  11. 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ă

Comentariile nu închise.

Blog la WordPress.com.

SUS ↑