Just nu i M3-nätverket
Gå till innehåll

Dela upp bokstäver o siffror i en cell


Rob..

Rekommendera Poster

Hej!

 

Har en massa värden i en kolumn som behöver delas upp mellan text o siffror.

Exempel 123qwe vill jag dela upp i två kolumner; 123 och qwe, texterna kommer i regel efter siffrorna men antalet siffror och framförallt antalet bokstäver kan variera kraftigt.

 

Kan man lösa detta på ngt smidigt sätt har engelsk version av excel.

 

 

Länk till kommentar
Dela på andra webbplatser

Se exempel här:

http://www.eforum.idg.se/viewmsg.asp?entriesid=846140

 

 

*****Tillägg******

OM talen står till vänster så borde det här fungera:

 

Plocka ut tal

=VÄNSTER(A1;PRODUKTSUMMA(1*ÄRTAL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1))))

 

Plocka ut Text

=HÖGER(A1;LÄNGD(A1)-PRODUKTSUMMA(1*ÄRTAL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1))))

 

 

*****Tillägg 2******

Engelsk sa du ju faktiskt. Så här blir det med engelsk windows och engelsk excel:

=LEFT(A1,SUMPRODUCT(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("1:50")),1))))

 

=RIGHT(A1,LEN(A1)-SUMPRODUCT(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("1:50")),1))))

 

Om du har svenska inställningar i windows så får du byta , till ;

 

Översatt med hjälp av "formelöversättaren" som kan laddas ner från http://www.xldennis.com.

 

OBS att avanstående formler förutsätter att strängarna är maximalt 50 tecken långa

[inlägget ändrat 2006-09-20 12:01:15 av MH2]

Länk till kommentar
Dela på andra webbplatser

Mm har du ngn lösning ifall talen ser ut så här;

123abc05 eller 123acb05efg i dessa fall vill jag ha dem uppdelade på 123 samt resten i en annan kolumn.

 

 

Länk till kommentar
Dela på andra webbplatser

Oj, det var knepigare. Då måste man nästan hitta den "lägsta" bokstaven. Hmm, får det inte att fungera med produktsumma. Verkar kräva matrisformel. dvs du trycker CTRL+shift+enter när du matat in formeln så att det blir måsvingar runtomkring

 

 

{=VÄNSTER(A1;MIN(OM(ÄRFEL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1));RAD(INDIREKT("1:50"))))-1)}

 

=LEFT(A1,MIN(IF(ISERROR(1*MID(A1,ROW(INDIRECT("1:50")),1)),ROW(INDIRECT("1:50"))))-1)

 

För högerledet borde det här fungera

=HÖGER(A2;LÄNGD(A2)-MIN(OM(ÄRFEL(1*EXTEXT(A2;RAD(INDIREKT("1:50"));1));RAD(INDIREKT("1:50"))))+1)

 

=RIGHT(A2,LEN(A2)-MIN(IF(ISERROR(1*MID(A2,ROW(INDIRECT("1:50")),1)),ROW(INDIRECT("1:50"))))+1)

 

Hmmm, det blev en ovanligt ful sak. Det grämer mig dessutom att det inte går att få det att fungera utan matrisformel :-(

 

Länk till kommentar
Dela på andra webbplatser

Den här förklaringen vinner inget pedagogpris...

 

Hmmm, tar det på svenska och skalar löken lite inifrån och ut in. OK?

 

 

{n}={1-50}={RAD(INDIREKT("1:50")}

är bara ett sätt att få fram en matris med siffrorna 1;2;3;4...;50. Det är ett standardtrick i matrisformler eftersom det inte går att skriva 1:50 eller liknande. Det används för att returnera det n-te tecknet.

 

EXTEXT(A1;RAD(1:50);1)

skapar en matris av tecken genom att "bläddrar igenom texten", tecken 1-50

Dvs

EXTEXT(A1;startpos;1)= 1;2;3;a;b;c;0;5;ingenting;ingenting;....

den tar 1 tecken i taget från startpos (som räknas upp med 1-50)

 

Problemet är att hitta den första bokstaven.

ÄRTAL är ju bra på att identifiera siffror. Men ÄRTEXT reagerar även på siffror när man plockar ut dom med hjälp av EXTEXT. Så vi gör en fuling. Om man tar 1* EXTEXT() så returneras ett felvärde om det aktuella tecknet är en bokstav. Det fångar vi upp med hjälp av

=ÄRFEL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1))

eller

ÄRFEL(1*tecken 1-50)

 

Dvs om det är en bokstav så får vi Sant och om det är en siffra så blir det Falskt.

Sedan kör man det genom en om-sats

=(OM(ÄRFEL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1));RAD(INDIREKT("1:50")))

=Om(bokstav;RAD(INDIREKT("1:50"))

eller

Om det är en bokstav, returnera vilket nummer den har. Nummer= position i matrisen=position i strängen

 

Sedan skall vi bara hitta det lägsta numret med hjälp av MIN

Nmin=MIN(OM(ÄRFEL(1*EXTEXT(A1;RAD(INDIREKT("1:50"));1));RAD(INDIREKT("1:50"))))

(det är ju bara bokstäverna som returnerar tal)

Till sist använder vi VÄNSTER för att returnera de (Nmin-1) vänstraste tecknen och HÖGER för att returnera de (längd-(Nmin+1)) sista siffrorna

Puuh

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...