Office Guru

Támadás az utolsó szóköz utáni tartalom ellen

Öt egyszerű függvény és kész is a csoda, ami lehetetlennek tűnt korábban

2015. augusztus 21. - Office Guru

Mai kis okosságunként folytassuk egy, a tegnapinál egyszerűbb Excel-kérdés megválaszolásával, amely nagyon sok helyzetben, sokféle táblázatnál hasznos lehet számunkra, ráadásul tökéletesen megmutatja, hogy a SUBSTITUTE függvény milyen széles skálán alkalmazható problémák megoldására az egyszerű karaktercsere mellett.

Szóval a kérdés annyi lenne csak, hogy a lent látható példában hogyan tudnánk azt kilistázni a második oszlopba, hogy egy-egy hallgató nevének mi az utolsó része (azaz mondjuk mi az utolsó keresztneve, tehát nagyjából az utolsó szóköz utáni szövegrész érdekelne minket)?

harmadik.jpgA megoldáshoz alapvetően öt függvényt fogunk egymásba ágyazni, szóval ha valakinek van egyszerűbb módszere, nyugodtan szóljon - mindenesetre mi most kezdjük kapásból a REPT függvénnyel, ami igen egyszerű célt szolgál, az első paramétereként megadott karaktereket, számokat, szövegeket, a második paraméterként megadott darabszámszor megismétli.

Ergó a REPT("Siker",10) függvény, a Siker szót fogja egy cellába 10 alkalommal beírni egymás után.

A LEN függvényt nem nagyon kell bemutatni a nem túl tapasztalt Excel-felhasználók számára sem, egyszerűen megadja, hogy a paraméterként megadott cellában lévő szöveg/tartalom hány karakterből áll.

Azaz LEN(A1) megadja, hogy az A1 cellában lévő tartalom hány karakterből áll.

Folytatva a sort, jöjjön megoldásunk lelke, a SUBSTITUTE függvény, amely szintén nem egy kvantumfizika, hiszen egy megadott cellában lévő adaton belül, a második paraméterként megadott részt a harmadik paraméterként megadott részre fog lecserélni.

Így értelemszerűen SUBSTITUTE(A1," ","A") az A1 cellában lévő tartalom szóközeit cseréli le A betűre. Ugye, hogy nem egy komplikált téma ez sem.

A RIGHT függvény a mindennapokban szinte kötelezően használandó és szükséges darab, a cellánk jobb oldaláról vág le és ír ki nekünk annyi karaktert, ahányat második paraméterként megadunk neki, azaz RIGHT(A1,5) az A1 cella tartalmának utolsó 5 karakterét fogja kiírni.

Ezzel pedig el is érkeztünk az utolsó függvényünkhöz ma, ami a TRIM, ez egyszerűen egy megadott cellából tünteti el az összes felesleges szóközt - TRIM(A1) tehát az A1 összes szóközét törli (vagyis az összes feleslegeset, hiszen a szavak között egy-egy szóközt mindig meghagy).

Miután ezeket megismertük, következhet a fentebb taglalt probléma megoldása, ami a következő függvénykombináció lesz:

TRIM(RIGHT(SUBSTITUTE(D5," ",REPT(" ",LEN(D5))),LEN(D5)))

Először próbáljuk meg magunk értelmezni, hiszen nem annyira bonyult mint amilyennek látszik. Elsőként az általunk kiválasztott névnél, jelen esetben Mikor Kálmán esetében fogjuk a REPT(" ",LEN(D5)) függvénnyel a szóköz(öke)t annyiszor megsokszorozni, amilyen hosszú maga a cella, majd ezt a megsokszorozott szóközt fogjuk a SUBSTITUTE(D5," ",REPT(" ",LEN(D5))) kombinációval a szóközök helyére beírni, tehát valami ilyesminél járunk most:

negyedik.jpgMire van most szükségünk? A RIGHT függvény segítségével levágunk annyit az új eredményünkből jobbról, amennyi az eredeti cella tartalmának hosszúsága, hiszen így levágjuk az utolsó nevet és legalább ugyanennyi szóközt, azaz kapunk valami ilyesmit:

otodik.jpgAztán már csak a TRIM-mel kell eltávolítani a szóközöket és kész is vagyunk. Ha valaki végigcsinálta a leírás alapján, az most biztos elmosolyodik, mert ez az Excel igazi szépsége, az ilyen szuper kis megoldások, makró és mindenféle másolgatás nélkül.

hatodik.jpg

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr367722824

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

droid_ · http://matyiszuro.blog.hu/ 2015.08.21. 19:52:21

nem hasznalok excelt, de amikor ilyesmi kellett, ezt csinaltam:
- substitute szokozt a semmire, ennek hosszat kivonom az eredeti hosszabol -> szokozok szama
- substitute az utolso szokozt valami specialisra, pl # (substutite-nak meg lehet mondani, melyik elofordulast cserelje, melyik = szokozok szama)
- find a specko karakterre -> pozicio
- right a specko karakter poziciojatol

Office Guru 2015.08.21. 20:44:53

@droid_: Tök jóóó megoldás, tetszik! Köszi!

mekmec 2015.08.21. 21:26:31

Nagyon jó megoldás. A magyar nyelvű Excelekben így néz ki:
=KIMETSZ(JOBB(HELYETTE(A8;" ";SOKSZOR(" ";HOSSZ(A8)));HOSSZ(A8)))
A kollégáimmal az egyik kedvelt játékunk a "Na ezt hogy oldod meg Excelben?" Kiváló agytorna.

2015.08.21. 21:49:50

azért néha egyszerűbb "program"-ból, kb.:

Public Function fgv(cella As String)
Dim i As Integer

i = Len(cella)

While Mid(cella, i, 1) <> " " And i > 1
i = i - 1
Wend

fgv = Mid(cella, i + 1)

End Function

Androsz · http://wikipedia.blog.hu/ 2015.08.21. 21:57:38

@toportyánféreg: Programmal könnyű. Az igazi agytorna a csakis függvényekkel való megoldás. A csúcson már nem ér segédcellákat sem bevonni. :-)

Office Guru megoldása leleményes, tetszik.

2015.08.21. 22:43:00

@Androsz: tényleg szellemes, de ha erre van munkahelyen idő, akkor az csak állami lehet :)

2015.08.21. 23:27:28

@droid_: =JOBB(A1;HOSSZ(A1)-SZÖVEG.KERES("#";HELYETTE(A1;" ";"#";HOSSZ(A1)-HOSSZ(HELYETTE(A1;" ";"")))))

nekem kevésbé beteg

2015.08.21. 23:28:31

illetve nem kevésbé :)

beef 2015.08.22. 09:32:30

Vagy egy kis Regexp-et becsempészve:
=KÖZÉP(A1;SZÖVEG.KERES("[:space:][a-záéíóöúüű]+$";A1;1)+1;99)

nitrites_pácsó 2015.08.23. 12:40:39

@droid_: Szép megoldás, bár az utolsó két lépés - elegánsabban - összefogható a "KÖZÉP" függvénnyel valahogy így: =KÖZÉP(A2;SZÖVEG.KERES("#";HELYETTE(A2;" ";"#";HOSSZ(A2)-HOSSZ(HELYETTE(A2;" ";""))))+1;100) Ezáltal nincs szükség a külön pozicionálásra. Meg kell azonban jegyezni, hogy OfficeGuru megoldása annyival jobb (ugye mindig ki kell zárni az összes hibalehetőséget), hogy ha pl nagy mennyiségű cellával dolgozunk, és akár csak egyben is előfordul a "spec. karakterünk" az eredeti szövegben, akkor ott bizony hibás megoldást kapunk.

droid_ · http://matyiszuro.blog.hu/ 2015.08.23. 15:21:18

@nitrites_pácsó: varazskarakter mellett meg egy varazskonstanst (100) is beletenni szerintem nem elegansabb, de izlesek es pofonok.

nitrites_pácsó 2015.09.05. 20:26:16

@droid_: Igazad van. Íme tehát javítva: =KÖZÉP(A2;SZÖVEG.KERES("#";HELYETTE(A2;" ";"#";HOSSZ(A2)-HOSSZ(HELYETTE(A2;" ";""))))+1;HOSSZ(A2)) Így nekem is jobban tetszik, és a 100 karakternél hosszabb szavaknál sem lesz gond :) , de a varázskarakterrel akkor is vigyázni kell!
süti beállítások módosítása