|
Materialet publicerat med tillstånd från Dennis Wallentin.
Inledning
I XL finns det en uppsjö av textfunktioner. Dessa kan komma
väl till pass i olika situationer, inte minst när man importerar
data från andra program. Här presenteras och demonstreras de
allra flesta textfunktionerna. Jag beskriver inte funktionerna
utförligt utan mer översiktligt och samlat. För djupare
diskussion kring de enskilda funktionerna se XL:s inbyggda
hjälpfunktion.
Hämta delvärden ur textsträngar
Det finns tre funktioner för att hämta delvärden ur
textsträngar, VÄNSTER, HÖGER och EXTEXT. Styrkan ligger i att
bearbeta delar av större textvärden, såsom artikelnummer mm.
Man kan också manipulera hur textvärdena presenteras m h a
funktionerna GEMENER, VERSALER och INITIAL.
I XL finns det två funktioner för att hitta textdelvärden,
HITTA och SÖK. Fördelen med HITTA-funktionen jämfört med
SÖK-funktionen är att HITTA-funktionen skiljer på gemener och
versaler. Detta kan ibland vara direkt avgörande för resultatet.
HITTA-funktionen demonstreras därför mer utförligt här. Det
går också alldeles utmärkt att räkna antal tecken i celler m h
a funktionen LÄNGD.
I tabellen nedan demonstreras dessa funktioner.

Hantera blanksteg
Ibland vid import av data kan överflödiga blanksteg följa
med datan. För att arbeta med textvärden krävs det att dessa
tas bort. Det sker bäst m h a RENSA-funktionen. En snarlik
funktion är STÄDA-funktionen men den tar bort icke
utskrivningsbara tecken men inte blanksteg. Man kan också
sammanfoga text, vilket kan endera ske m h a &-tecknet eller
SAMMANFOGA-funktionen. Om man upptäcker större fel i
textsträngarna kan man byta ut tecken, vilket sker
företrädesvis m h a BYT.UT- och ERSÄTT-funktionerna. Att
omvandla text till tal krävs om man ska utföra beräkningar på
datan. Man kan även göra det omvända, d v s omvandla tal till
text m h a TEXT-funktionen.
I nedanstående tabell demonstreras dessa funktioner.

Komplexa textfunktioner
I tabellen nedan visas litet mer komplicerade textformler,
vilka helt enkelt bygger på de ovan presenterade funktionerna och
(som alltid) fantasi. Som vanligt (!) så kan man få till stånd
flera lösningar på ett problem. Katalogtillhörighet är ett
sådant problem. Med hjälp av INF-funktionen och angivandet av
variabeln "katalog" erhålls samma information.

Rak vänstermarginal
Många gånger har vi behov av att få en rak vänster marginal
i celler, t ex om text ska centreras.
Nedanstående bild belyser problematiken:

För att erhålla en uppställning liknande den i "Formaterad"-kolumnen
kan följande textformat skapas:
Understrykningstecknet _ skapar blanksteg i textformatet och
möjliggör det önskade slutresultatet. Antal tecken styrs av hur
"centrerad" texten ska vara.
Hitta positioner
Här demonstreras en matrisformelteknik för att identifiera
ett teckens position i en textsträng.
I exemplet ska tecknet punkt (".") sista position i
textsträngar identifieras, såväl räknat från vänster som
höger sida:
- Exempelvis 1.2.3 = 4 från vänster sida och 2 från höger
sida.
Bilden nedan visar exemplet i sin helhet:

För att få till stånd positionsuppgiften från vänster sida
används följande matrisformel och som kopieras nedåt i
kolumnen:
-
{=LÄNGD(A2)-LÄNGD(HÖGER(A2;PASSA(".";EXTEXT
(A2;LÄNGD(A2)+1-RAD(INDIREKT("1:"&LÄNGD(A2)));1);0)-1))}
För att få till stånd positionsuppgiften från höger sida
används följande matrisformel och som kopieras nedåt i
kolumnen:
-
{=LÄNGD(HÖGER(A2;PASSA(".";EXTEXT(A2;LÄNGD(A2)
+1-RAD(INDIREKT("1:"&LÄNGD(A2)));1);0)-1))+1}
Hitta första och sista raden
Här demonstreras en teknik för att ur en textlista
identifiera den första respektive sista raden ett textvärde
förekommer i, såsom del av ett artikelnummer
Tekniken kan vara användbar för t ex beräkningar av större
artikellistor.
Följande bild visar exemplet i sin helhet:

För att erhålla den första raden används följande
matrisformel:
-
{=MIN(OM(ÄRTAL(SÖK(D1;A1:A6));RAD(A1:A6)))}
För att erhålla den sista raden används följande
matrisformel:
-
{=MAX(OM(ÄRTAL(SÖK(D1;A1:A6));RAD(A1:A6)))}
Slutligen för att summera radintervallet i B-kolumnen används
följande formel:
-
=SUMMA(INDIREKT("B"&D2&":B"&D3))
Hitta första kolumnnamnet
Detta tips belyser hur vi kan hitta första kolumnnamnet där
kolumnen innehåller ett textvärde.
Bilden nedan visar exemplet i sin helhet:

För att erhålla första kolumnnamnet används följande
matrisformel:
-
{=INDEX($A$1:$D$1;MIN(OM(ÄRTEXT($A$2:$D$4);
KOLUMN($A$1:$D$1);"")))}
Formeltekniken kan givetvis användas för att hitta det
första numeriska värdet i en uppställning:
-
{=INDEX($A$1:$D$1;MIN(OM(ÄRTAL($A$2:$D$4);
KOLUMN($A$1:$D$1);"")))}
Räkna förekomsten av textsträngar
I det första exemplet demonstreras hur vi kan räkna
förekomsten av ordet "Excel" i meningen:

Följande formel gör ingen åtskillnad mellan versaler och
gemener för den sökta textsträngen:
-
=SUMMA(LÄNGD(A2)-LÄNGD(BYT.UT(VERSALER(A2);
VERSALER(B2);"")))/LÄNGD(B2)
Vill vi göra åtskillnad mellan versaler och gemener sker det
genom att ta bort funktionen VERSALER:
-
=SUMMA(LÄNGD(A2)-LÄNGD(BYT.UT(A2;B2;"")))/LÄNGD(B2)
I det andra exemplet visas hur vi kan räkna förekomsten av en
textsträng i en lista:

Följande formel ger oss det önskade antalet:
-
=PRODUKTSUMMA(N(ÄRTAL(SÖK(B2;A2:A5))))
Korrekt svensk formatering av ISBN
Mats Carlsson, känd lokal bokhandlare i Halmstad och en
tillikaledes hängiven XL-anhängare, har på ett generöst sätt
tillhandahållit detta tips för att formatera ISBN (de numren som
identifierar böcker) enligt svensk standard.
Noterbart är att det inbyggda formatet i XL speglar de
amerikanska förhållandena och återger inte korrekt ISBN enlig
svensk standard.
Bilden nedan visar exemplet i sin helhet:

Följande "vackra" formel skapar det önskade
formatet på ett excellent sätt:
-
=OM(EXTEXT(A2;3;1)="0";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;1)
&"-"&EXTEXT(A2;4;6)&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)
="1";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;1)&"-"&EXTEXT(A2;4;6)
&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)="2";VÄNSTER
(A2;2)&"-"&EXTEXT(A2;3;2)&"-"&EXTEXT(A2;5;5)&"-"&HÖGER
(A2;1);"")&OM(EXTEXT(A2;3;1)="3";VÄNSTER(A2;2)&"-"&EXTEXT
(A2;3;2)&"-"&EXTEXT(A2;5;5)&"-"&HÖGER(A2;1);"")&OM
(EXTEXT(A2;3;1)="4";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;2)
&"-"&EXTEXT(A2;5;5)&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)
="5";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;3)&"-"&EXTEXT(A2;6;4)
&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)="6";VÄNSTER(A2;2)
&"-"&EXTEXT(A2;3;3)&"-"&EXTEXT(A2;6;4)&"-"&HÖGER(A2;1);"")
&OM(EXTEXT(A2;3;1)="7";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;4)
&"-"&EXTEXT(A2;7;3)&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)
="8";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;5)&"-"&EXTEXT
(A2;8;2)&"-"&HÖGER(A2;1);"")&OM(EXTEXT(A2;3;1)
="9";VÄNSTER(A2;2)&"-"&EXTEXT(A2;3;6)&"-"&EXTEXT
(A2;9;1)&"-"&HÖGER(A2;1);"")
Första bokstaven versal
Mats Carlsson har även tillhandahållit detta tips som
säkerligen många kan ha nytta av - Att omvandla första
bokstaven till versal och övriga bokstäver till gemen.
Oavsett om hur texten är skriven omvandlas första bokstaven
alltid till versal såsom bilden nedan visas:

Följande formel gör det möjligt:
-
=VERSALER(VÄNSTER(A2))&GEMENER(ERSÄTT(A2;1;1;""))
Detta exempel finns ej tillgängligt för hämtning.
Ersätta oönskade tecken i importerad textmassa
Vid import av data från andra system, i synnerhet från
stordatorsystem, erhålls andra tecken för å, ä och ö. Att
ersätta dessa tecken kan många gånger vara önskvärt.
Detta tips visar på ett sätt att ersätta tecknen med de
önskade.
Först måste vi ta reda på vilket teckennummer varje tecken
har i ANSI-tabellen. Det sker enklast med följande VBA-procedur:
|
Option Explicit
Sub TeckenNummer()
' © 2002 Alla
rättigheter XL-Dennis
Dim i As
Long
For i = 1
To 255
Cells(i, 1).Value = Chr(i)
Next i
End Sub |
Antag att tecknet "¬" finns angivet i en textmass
istället för å. Detta tecken har numret 172 i ANSI-tabellen.
- Markera cellområdet som ska uppdateras.
- Välj kommandot Redigera | Ersätt...
- I dialogrutan och i textfältet för "Sök efter"
skrivs tecknet in mha tangentbordskombinationen ALT+172 -
i textfältet ska nu ¬ visas.
- I textfältet för "Ersätt med" anges å.
Hitta första & sista textvärdet
Här demonstreras två lösningar för att erhålla det första
respektive det sista textvärdet i en lista.
Följande bild visar exemplet i sin helhet:

För att erhålla det första textvärdet används följande
matrisformel:
-
{=INDEX(A2:A7;PASSA(0;ANTAL.OM(A2:A7;"<"&A2:A7);0))}
För att erhålla det sista textvärdet används nedanstående
matrisformel:
-
{=INDEX(A2:A7;PASSA(0;ANTAL.OM(A2:A7;">"&A2:A7);0))}
Hitta radområdet för textvärden
Här demonstreras hur vi kan hitta start- respektive slutrad för
förekomsten av ett textvärde, dvs det radområde som ett
textvärde finns i.
Bilden nedan visar exemplet i sin helhet:

Följande matrisformel identifierar den första raden:
-
{=MIN(OM(ÄRTAL(SÖK(C1;A2:A7));RAD(A2:A7)))}
Följande matrisformel identifierar den sista raden
-
{=MAX(OM(ÄRTAL(SÖK(C1;A2:A7));RAD(A2:A7)))}
Formlerna gör ingen åtskillnad mellan gemener och versaler. Om
vi vill kan vi givetvis sätta ihop dessa så att utfallet blir
såsom: Radområdet: 4:7
Antal textvärden som inte förekommer
Här demonstreras två tekniker för att erhålla antal
textvärden som inte förekommer i en lista.
Bilden nedan visar exemplet i sin helhet:

Formeln i cell B1 är följande:
-
=PRODUKTSUMMA(N(ANTAL.OM(A2:A6;C2:C11)=0))
Följande matrisformel används i cell B2:
-
{=SUMMA(N(ICKE(ANTAL.OM(A2:A6;C2:C11))))}
|