handdator

Visa fullständig version : Excel! Söka teckensträng från höger


Kurash
2012-04-18, 08:12
Jag har problem.
Ponera att man har en lista med adresser där gata, postnummer och ort alla står i samma cell. Man vill sedan dela upp detta lite snyggt i 3 olika celler.

Exempel: Vattugatan 36 22590 Södra Sandby
exempel2: Stora kungsgatan 36b 44590 Karlskrona

Det man vill göra är alltså att söka från höger, hitta postitionen första SIFFRAN från höger. Detta borde även vara den sista siffran i cellen eftersom orter inte innehåller siffron. Eller om man kan söka från vänster och hitta en serie av 5 siffror i följd, vilket inte kan vara något annat än postnummer.

Därefter kan man extexta() eller HÖGER() för att få ut postnummer, ort och gata.

Förslag?

mikaelj
2012-04-18, 08:15
Reverse (http://www.ozgrid.com/forum/showthread.php?t=36398) sedan Right verkar det som.

Kurash
2012-04-18, 09:16
Reverse vänder på hela strängen? Kan iofs vara användbart. Men Right är väl samma som höger(), och returnerar ett bestämt antal tecken från höger. Problemet är ju att veta hur många som ska returneras.

mikaelj
2012-04-18, 09:47
Reverse, find, left. Menade jag. Fast ja, om du inte vet hur många kan det bli klurigt.
Postat via en mobil enhet

Jens.Andersson
2012-04-18, 10:17
Vet inte om det funkar men en tanke:

Reversa texten så du har "<ort> <postnummer> <gata>", det gör ingenting om texten är baklänges

Använd =extext(cell, 1, Search(" ", cell, 1)) får att få ut orten

Jag kallar nu "Search(" ", cell, 1)" för x för att göra det mindre plottrigt

Använd =extext(cell, x, Search(" ", cell, x+1)) får att få ut postnummret

Och för att få ut gatan: extext(<icke reverserade strängen>, 1, <längden av strängen> - <Search(" ", cell, x+1) på den reverserade strängen>)

Vet inte om det funkar, är inte så haj på excel, bara en tanke.

Kurash
2012-04-18, 12:11
Problemet där är att man tar information fram till första mellanslaget, om orten innehållet ett mallanslag blir första delen i orten (eftersom man reverserat) postnummer...
Men jag tror jag kan lösa det genom att vända på strängen, sen kolla om tecknet efter första mellanslaget är numeriskt, annars ta 5 siffror efter nästa mellanslag.

Mitt problem just nu är dock VB. Det funkar jättebra att göra Reversefunktionen med infoga modul. Så länge arket är öppet går den att använda i andra ark om jag bara hänvisar till arket i vilket jag skapade formeln . När jag sedan stänger arket med formeln och öppnar igen får jag bara #NAMN? Allt ser rätt ut under Moduler men av någon anledning har den glömt bort hur man använder min formel. Vad kan vara fel?

Kurash
2012-04-18, 12:16
NVM, hade inaktiverat macron...

Kurash
2012-04-18, 15:24
Jag tog den långa vägen kan man säga, om någon är intresserad av lösningen. Gjorde först VB-scriptet som vänder på en cell, reverse(), och började sedan leta efter en eller två mellanslag och kolla om efterföljande var en siffra. Därefter var det bara att extexta och reversera igen.

Exemplet kan vara:
jägarstigen 4 12345 södra Lund
jägarstigen 4 b 12345 Lund


Postnumret:

=OM(ÄRFEL(TEXTNUM(EXTEXT(formlerVB.xlsm!Reverse(B2 4);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1;1))>0)=FALSKT;formlerVB.xlsm!Reverse(EXTEXT(formlerVB. xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1;5));formlerVB.xlsm !Reverse(EXTEXT(formlerVB.xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1)+1;5)))


Orten:

=OM(ÄRFEL(TEXTNUM(EXTEXT(formlerVB.xlsm!Reverse(B2 4);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1;1))>0)=FALSKT;formlerVB.xlsm!Reverse(VÄNSTER(formlerVB .xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))));formlerVB.xlsm!Rev erse(EXTEXT(formlerVB.xlsm!Reverse(B24);1;HITTA(" ";formlerVB.xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1))))

Gatuadress:

=OM(ÄRFEL(TEXTNUM(EXTEXT(formlerVB.xlsm!Reverse(B2 4);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1;1))>0)=FALSKT;formlerVB.xlsm!Reverse(EXTEXT(formlerVB. xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))+6;25));formlerVB.xls m!Reverse(EXTEXT(formlerVB.xlsm!Reverse(B24);HITTA (" ";formlerVB.xlsm!Reverse(B24);HITTA(" ";formlerVB.xlsm!Reverse(B24))+1)+6;25)))

The_RobRoy
2012-04-18, 15:26
Text to columns --> separera på mellanslag.

Kurash
2012-04-19, 07:24
Text to columns --> separera på mellanslag.

Eftersom det är olika antal mellanslag i cellerna kommer inte alla postnummer hamna i samma kolumn om man gör så.