Excel - vzorec pro vytvoření username?

Programy pro práci s textem, tabulkami, prezentacemi

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod AiR 17. 2. 2007 11:46

Ahoj, potreboval bych poradit, jak vytvorit v Excelu vzoreček pro username?

Username musi mit max. 8 znaku, vzdy 4 prvni ze jmena a 4 prvni z prijmeni, pokud ma jmeno nebo prijmeni mene znaku, berou se pouze ty, ktere tam jsou, no a aby to nebylo tak jednoduche, tak nektera jmena jsou duplicitni, takze je na konci cislice, v tomto pripade se vezmou z prijmeni prvni 3 znaky a 4 znak bude ona cislice.

Pro priklad uvedu par zadani a jak by mel vypadat vysledek:

Karel Novotny - KARENOVO
Karel Novotny 2 - KARENOV2
Magdalena Prchava - MAGDPRCH
Magdalena Prchava 3 - MAGDPRC3
Jan Novak - JANNOVA
Jan Novak 4 - JANNOV4
Jan Kal - JANKAL
Jan Kal 2 - JANKAL2
Li Po - LIPO
Li Po 5 - LIPO5
Jaroslav Cip - JAROCIP
Jaroslav Cip 6 - JAROCIP6
Li Novak 5 - LINOV5


Dekuji vsem za napady a rady.
:wink:
Naposledy upravil AiR dne 17. 2. 2007 21:17, celkově upraveno 1
AiR
Junior

Odeslat příspěvekod obcasny_navstevnik 17. 2. 2007 12:02

relativne jednoduche reseni nabizi procedura ve VBA. nasledujici postup lze realizovat i pomoci fukci listu.
pomoci funkce Trim(string) odstran pripadne nadbytecne mezery v retzcich, odstarn pripadnou diakritiku (vhodna procedura je k nalezeni na netu), rozdel retezec na dve casti s pouzitim fce InStr([start, ]string1, string2[, compare]), pokud jsou casti delsi nez pozadovany pocet znaku, vvyber pomoci Left(string, length) cast, spoj operatorem &, pouzij UCase(string) na prevedeni na velka pismena; jsou-li casti kratsi, pouzij cele.
pak vyhledej duplicity, vyber z retezcu casti o jeden znak kratsi a dopln poradovym cislem

tot rada, jak na to.
obcasny_navstevnik
Junior

Odeslat příspěvekod AiR 17. 2. 2007 13:57

diky moc
ale neslo by to jako pro debila ;)
protoze moje max. znalost excelu je funkce vlookup a tady nevim, ktera bije
predpoklad je ten, ze predloha je vzdy spravne, bez nadbytecnych mezer a diakritiky, tedy JmenoMezeraPrijmeniMezeraCislo
jde tedy jen oto, prevest to na username a fce by mela byt cela v jedne bunce, tedy zadne prevadeni z bunky A do B a vysledek v C
proste A je zadani a v B musi vylezt vysledek
nejedna se o jednorazovou akci, ale musi to fungovat i na dalsi nove pridavana jmena

mozna se vyjadruji podivne, ale jak rikam, nejsem odbornik na excel :?
AiR
Junior

Odeslat příspěvekod Peter B. 17. 2. 2007 15:38

Prilozeny vzorec som otestoval na vsetky vyssie uvedene mena a fungoval bez chyby. :-B Neviem co to urobi na velkom mnozstve riadkov, ale treba vyskusat a bud to pojde, alebo nepojde.

Popis tohto hrozivo vyzerajuceho vzorca :shock: urobim asi na buduci tyzden na svojom blogu. Samozrejme nie je to jedine riesenie a urcite mozno niekto vymysli aj iny sposob.

V stlpci A by mali byt tie mena a tento vzorec v stlpci B.

peter b. [MVP]

=VELKÁ(KDYŽ(JE.CHYBHODN(HODNOTA(ČÁST(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1)+1;DÉLKA(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1)))-HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1))))=PRAVDA;ZLEVA(ČÁST(A1;1;HLEDAT(" ";A1;1)-1);4)&ZLEVA(ČÁST(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1;HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1)-1);4);ZLEVA(ČÁST(A1;1;HLEDAT(" ";A1;1)-1);4)&ZLEVA(ČÁST(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1;HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1)-1);3)&ČÁST(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1)+1;DÉLKA(ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1)))-HLEDAT(" ";ČÁST(A1;HLEDAT(" ";A1;1)+1;DÉLKA(A1));1))))
Peter B.
Junior

Odeslat příspěvekod Peter B. 17. 2. 2007 15:50

Teraz som zistil, ze tam mam malu nepresnost. Fungovat to bude, len ak je za kazdym priezviskom jedna medzera. Ja som skopiroval tie mena z prveho prispevku, ale neriesil som ci tam je znak navyse :( (v tomto pripade medzera)
peter b.
Peter B.
Junior

Odeslat příspěvekod obcasny_navstevnik 17. 2. 2007 16:25

priste nepis, ze zadat rady, ale rovnou priznej ze ...
takze:
v A1 je zadani
protoze jeden vzorec je neprehledny, tak pro krocich (ale muzes si to pak prepsat do jedine funkce :) , preji prijemnou zabavu)
do B1: =KDYŽ(D1=0;G1;KDYŽ(DÉLKA(G1)>7;ZLEVA(G1;7)&ZPRAVA(A1;1);G1&ZPRAVA(A1;1))) vysledek skladani
do C1: =NAJÍT(" ";A1;1) nalezne 1. mezeru
do D1: =KDYŽ(JE.CHYBHODN(NAJÍT(" ";A1;C1+1));0;NAJÍT(" ";A1;C1+1)) nalezne druhou mezeru
do E1: =VELKÁ(ZLEVA(ZLEVA(A1;C1-1);4)) prvni cast username
do F1: =VELKÁ(ZLEVA(KDYŽ(D1=0;ZPRAVA(A1;DÉLKA(A1)-C1);ČÁST(A1;C1+1;D1-C1-1));4)) druha cast username
do G1: =CONCATENATE(E1;F1) slouceni casti
do H1: =KDYŽ(D1=0;G1;KDYŽ(DÉLKA(G1)>7;ZLEVA(G1;7)&ZPRAVA(A1;1);G1&ZPRAVA(A1;1))) pridani poradoveho cisla

nejprve postupne vkladej do C1, D1,...,G1 a nakonec do B1

doufam, ze pri vlozeni funkci nedoslo k nejakym chybam ci zkomolenim, jiste si to pripadne opravis
obcasny_navstevnik
Junior

Odeslat příspěvekod AiR 17. 2. 2007 17:36

jasne, ze chci vrovnou vzorec :lol:
diky moc
vyzkousim a uvidim
kdyby neco, tak jeste napisu 8)
AiR
Junior

Odeslat příspěvekod AiR 17. 2. 2007 18:59

2obcasny_navstevnik:
tak jsem to vyzkousel a vypada to dobre
v jednom pripade to nefunguje: Jan Novak 4 - JANNOV4
vytvori to JANNOVA4, myslim, ze by melo byt dodrzeno, ze pokud je tam cislice, tak by meli byt z prijmeni 3 znaky a posledni cislice, s tim ze je jedno kolik znaku ma jmeno, aspon doufam, ze se to tak pouziva
jsem zvedav jestli dam ten vzorec nekdy dohromady, snad az pochopim, co ktera fce dela ;)

jeste jednou diky vsem a Petře, kde mas ten blog?
--------------------------------------------------------------------------------
jeste me napadly 2 veci, ktere by bylo potreba resit
1) nejake upozorneni na duplicitni USERNAME
muze se stat, ze budu mit napr. jmena Karel Novotny a Karel Novomestsky, username budou mit potom stejny KARENOVO, coz samozrejme nemuze byt
nebo si nevsimnu, ze uz tam jednoho uzivatele se jmenem Karel Novotny mam a budu tam cpat dalsiho
v tom pripade bych chtel, aby me to upozornilo a mohl jsem dat do A1 napr. Karel Novomestky 1 = KARENOV1

2) mene pravdepodobna zalezitost, ale stat se muze
pokud uz budu mit stejnych jmen vice nez 10, napr. Karel Novotny 11, slo by do funkce zakomponovat, aby se cislici nahradili posleni 2 znaky prijmeni atd. = KARENO11
Naposledy upravil AiR dne 31. 3. 2007 09:13, celkově upraveno 1
AiR
Junior

Odeslat příspěvekod obcasny_navstevnik 17. 2. 2007 21:46

(plati, ze ve zdrojovem retezci nesmi byt nadbytecne mezery), nejak jsem to prehledl, takze po oprave jeste jednou a trochu zjednosene:

slouceni dvou casti username a poradoveho cisla - tedy vysledek:
B1: =KDYŽ(D1=0;E1&F1;E1&F1&ZPRAVA(A1;1))
nalezeni prvni mezery:
C1: =NAJÍT(" ";A1;1)
nalezeni druhe mezery:
D1:=KDYŽ(JE.CHYBHODN(NAJÍT(" ";A1;C1+1));0;NAJÍT(" ";A1;C1+1))
polohy mezer umozni vyjmout z retezce prvni a druhou cast a zaroven urcuje druha mezera (poloha>0), ze bude pridano poradove cislo a vybrany max tri znaky do druhe casti
prvni cast username:
E1:=VELKÁ(ZLEVA(ZLEVA(A1;C1-1);4))
druha cast username:
F1:=VELKÁ(ZLEVA(KDYŽ(D1=0;ZPRAVA(A1;DÉLKA(A1)-C1);ČÁST(A1;C1+1;D1-C1-1));KDYŽ(D1=0;4;3)))

pro orientaci, jake hodnoty jedntlive casti vzorcu nabyvaji je vhodne pouzit rezim castecneho vypoctu - vice http://www.dataspectrum.cz/excelmag/excelmagmain.htm cislo EAM03/2003, kapitola 5
obcasny_navstevnik
Junior

Odeslat příspěvekod AiR 31. 3. 2007 09:14

Prosim jeste jednou, vymyslel by nekdo vzorec, ktery by splnoval vyse uvedene, tak aby se to veslo do jedne bunky a prosim jeste jeden vzorec pro pripad, ze zadani bude PRIJMENI JMENO CISLO, tedy prohozene jmeno a prijmeni? Dekuji moc
AiR
Junior

Odeslat příspěvekod obcasny_navstevnik 4. 4. 2007 21:07

k doplneni z 31.3.:
ad 1. duplicitu username lze resit bud zavolanim (udalostni procedura) subrutiny vyhledavajici duplicitu po vlozeni JMENO PRIJMENI CISLO napr.:
http://groups.google.com/group/no.it.pr ... 59cdc4a765
nebo pomoci funkce napr.:
http://www.dataspectrum.cz/pages/learni ... ngmain.htm Duplicity
ad 2. uz jsem drive uvedl, ze pozadavek na jedinou funkci generujici username vede ke znacne neprehlednemu reseni, pridat navic rozpoznani i dvouciferneho cisla jeste vice zneprehledni sestaveni funkce
k dalsimu pozadavku z 31.3., jina funkce pro kombinaci PRIJMENI JMENO CISLO by byla obdobna prvni, jen poradi skladani username se zmeni, coz pri nekolika krocich ve vice bunkach je trivialni.
navrhnout "jednobunecny" vzorec uz presahuje ramec napadu a rad a posouva se spise do profesionalni sfery.
obcasny_navstevnik
Junior

Odeslat příspěvekod AiR 21. 5. 2007 18:00

Opet zdravim a jen pripominam, ze navrh reseni vymyslel Peter Belko a uvadi ho zde: http://belko.blog.sme.sk/c/89399/Pouzit ... nkcii.html
Ja bych jeste potreboval takovyto vzorec, ktery by fungoval na poradi PRIJMENI JMENO CISLO, napr. NOVOTNY KAREL 5 = KARENOV5 a budu velmi stastny.
Prosim excel guru, zda by mi mohli poradit?
Diky diky diky
AiR
Junior

Odeslat příspěvekod BraunExcel 17. 8. 2007 10:30

Ahoj všem.
Potřeboval bych radu.
Jsem úplný,ale fakt úplný začátečník a sestavil jsem zatím v excelu jen jednoduchou soustavu vzorců,která mi funguje.
Přiznám se že si hraju s excelem ve volné chvíli jen v mobilu v aplikaci MicroCalc,nicméně i ten toho umí dost.
Potřeboval bych radu,jak mám udělat abych vytvořil pro jednu určitou buňku příkaz že když se v ní objeví 1,tak aby se zobrazilo PONDĚLÍ,2 - ÚTERÝ až 7 - NEDĚLE.

Je to mnou vytvořena tabulka kde zadám datum a vypočítá to jaký to byl nebo bude den.
Ve výsledné buňce se mi zobrazí 1-7 ale chtěl bych tam přímo text (název dne)
Určitě něco existuje.
V pc na to je jistě nějaká funkce ale tu já nemůžu použít protože tu "asi"není.
Vše jde nějak udělat a to určitě jde i teď.
Slovně by to bylo ten příkaz takhle:(Pokud v buňce A1 bude zobrazeno 4 tak zobraz "ČTVRTEK" v buňce A2)
Jde to?
Jinak bych prosil odkaz na nějaký úplný školský základy excelu.Dík
BraunExcel
Kolemjdoucí

Odeslat příspěvekod IgnorStoupa 17. 8. 2007 11:50

=IF(A1=1,"pondeli",IF(A1=2,"utery", IF(a1, atd... )))
IgnorStoupa
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod BraunExcel 17. 8. 2007 12:32

Díky za reakci a radu, ale nevím přesně jak by měl vypadat konec toho příkazu.
Napsal jsem to takhle:=IF(B7=1,"PONDELI",IF(B7=2,"UTERY",IF(B7=3,"STREDA",IF(B7=4,"CTVRTEK",IF(B7=5,"PATEK",IF(B7=6,"SOBOTA",IF(B7=7,"NEDELE",)))

Zkoušel jsem to s různým počtem závorek na konci i bez té čárky a stále nějaká chyba.
Možná vadí že tam mám velká písmena.

Zkopíruj si prosím ten můj vzorec a uprav ho do správného tvaru.

Další co mi nejde do hlavy je to, že v políčku B7 už jeden příkaz mám(=b11*d18) je to už výsledek, a tak když tam vložím vzorec tebou upravený tak musím smazat ten můj a tím pádem to číslo tam nebude doplněno.
Možná jde dat příkaz pro buňku odjinud nebo se tam těch příkazu dá dat do jedné buňky víc,možná to řeší nějak středník,to už neznám.A přitom je to určitě tak jednoduchý.

Teď jak jsem to odeslal tak se dívám na svůj příspěvek a ten vzorec a vypadá to (aspoň z displeje mého tel) jako by jsem měl v tom vzorci mezery.
Je to klam.Žádnou mezeru v něm nemám.
To jen na vysvětlenou, kdyby se vám to zobrazilo taky tak
BraunExcel
Kolemjdoucí

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků