webForumDet fria alternativet

Letarad i Excel..

22 svar · 14 269 visningar · startad av Kalle M

Kalle MMedlem sedan mars 20041 938 inlägg
#1

Har en fundering kring Letarad i Excel:

Exempelvis =LETARAD(A7;G10:H14;2)

1. Måste alltid sökvärdet vara i stigande ordning?

2. Angående ungefärlig:
Om den ska ta det närmaste som ligger i bokstavsordning så sätter jag Sant, 1 eller lämnar det tomt. Är det endast här sorteringen har betydelse?

3. Om jag vill att det ska stå "Saknas" sätter jag falskt eller skriver 0 (noll).
Här har alltså inte sorteringen någon betydelse?

4. Är det egentligen någon skillnad på att sätta sant, 1 eller lämna det tomt?

MindreVetandeMedlem sedan okt. 2005362 inlägg
#2

1. Nej, det styr du med det sista argumentet (Sant/falskt eller 1/0)
=LETARAD(A7;G10:H14;2;Falskt)
Kräver att det exakta värdet finns för att den skall returnera något. Dvs data kan vara osorterade.

=LETARAD(A7;G10:H14;2;Sant)
Tillåter "ungefärlig träff" och kräver att data är sorterade för att fungera som det är tänkt (i OpenOffice frågar de efter Sorterat/osorterat istället för "ungefärligt". Det är kanske lite mer pedagogiskt, även om det inte är helt korrekt)

Den sista varianten kan tyckas något onödig. Men den är mycket användbar i vissa fall. T.ex om du vill gruppera data i intervall. Exempel:

Antag att du skriver in följande i G10-H14 (H-cellerna inmatade som text)

0	0-1
1	1-2
2	2-3
3	3-4
4	>4

Nu kommer formeln:
=LETARAD(A7;G10:H14;2;Sant)

Att returnera en "intervallmarkering" när du ändrar värdet i A7. Kanske inte så glasklart vad man skall ha det till. Men antag att du vill dela in mätvärden i Godkänt, Misstänkt och Trasig eller nåt.
Du bör väl låsa adressen till Grupperingstabellen i de flesta fall. Typ:
=LETARAD(A7;$G$10:$H$14;2;SANT)
Om du vill använda formeln för en hel tabell med mätvärden så ändras ju inte din "grupperingstabell" och formeln kan kopieras.

2. Angående ungefärlig:
Om den ska ta det närmaste som ligger i bokstavsordning så sätter jag Sant, 1 eller lämnar det tomt. Är det endast här sorteringen har betydelse?

Halvrätt. Närmast föregående bokstav. Eller siffror som i mitt exempel.
Testa det här i G10-H14

a	Börjar på A
b	Börjar på B
d	Börjar på D
e	Börjar på E
f	Börjar på E

Och skriv in Ceacar i A7.

3. Om jag vill att det ska stå "Saknas" sätter jag falskt eller skriver 0 (noll).
Här har alltså inte sorteringen någon betydelse?

Stämmer. Kräver exakt träff, struntar i sortering.

4. Är det egentligen någon skillnad på att sätta sant, 1 eller lämna det tomt?

Nej, det är det inte.
SANT=1=default om inget fylls i
FALSKT=0

Kalle MMedlem sedan mars 20041 938 inlägg
#3

Tack så mkt!

Ska kolla igenom i veckan när jag får tid så jag återkommer.

Mvh

Kalle MMedlem sedan mars 20041 938 inlägg
#4

Japp funkar och jag tror att jag förstår.

Hur är det med funktionen Letaupp.!? Hur använder jag den?

MindreVetandeMedlem sedan okt. 2005362 inlägg
#5

Kalle M skrev:

Hur är det med funktionen Letaupp.!? Hur använder jag den?

Ja du. Det vet jag faktiskt inte. I någon gamla excel-hjälp stod det att den var kvar av "kompabilitetsskäl". Det finns ju 2 varianter. Den första verkar helt meningslös:

=LETAUPP("allan";A1:A8)
Om den hittar allan så returnerar den, ähhh, allan. Det var ju meningsfullt... Kanske som ett sätt att kontrollera om ett värde finns

Den andra varianten är lite skojjigare. Det går visserligen INTE att ange att den skall kräva exakt match (om det står a i en cell ovanför allan så kommer den att returneras). Listan måste alltså vara sorterad för att du skall kunna känna dig säker.
Men det är inte heller samma krav på att listan du letar i "står rätt". Om du använder LETARAD så måste ju "uppslagsvärdet" alltid stå i den vänstra kolumnen och det du vill returnera i den högra. Med LETAUPP så kan du vända på steken och t.ex ha uppslagsvärdet i kolumn B och returvärdet i kolukmn A. Exempel:
=LETAUPP("allan";B1:B8;A1:A8)
Eller, om du av någon anledning vill leta i en rad och returnera från en kolumn
=LETAUPP("allan";B1:I1;A1:A8)
Ja, du får en massa frihet.

Hursomhellst. Eftersom du inte kan kräva exakt match så är det inte speciellt användbart. Du får en betydligt flexiblare lösning om du kombinerar PASSA och INDEX.
=PASSA("allan";B1:B8;0)
Kommer alltså att returnera vilken cell i intervallet B1:B8 som innehåller "allan" (ordningsnummret). Om du kombinerar det med INDEX så returneras motsvarande cell i ditt dataområde
=INDEX(A1:A8;PASSA("allan";B1:B8;0))
dvs som letarad, men du kan ha kolumnerna i "fel ordning"

Den sista siffran i PASSA anger hur du vill söka. Det finns ett argument mer än i letarad (saxat från hjälpen):

0 =första värdet som är exakt lika med letauppvärde (osorterat)
1 =största värde som är mindre än eller lika med letauppvärde. Letauppvektor sorterad i stigande ordning:
-1 =minsta värde som är större än eller lika med letauppvärde. Letauppvektor sorterad i fallande ordning

Man kan göra ännu skojjigare saker med kombinationen PASSA/INDEX

Index kan ju ta emot både rad och kolumnreferens. Så i princip kan du kombinera två PASSA och leta i en 2-dimentionell rymd. Typ en korstabell.

Antag att du har en tabell som sträcker sig från A1:I8. I radrubrikerna (A-kolumnen) har du angivit egenskaper och i kolumnrubrikerna (rad1) har du angivit något slags grupptillhörighet. Då kan du enkelt returnera värdet för (skostorlek eller nåt) för flummiga hårdrockare:
=INDEX(A1:I8;PASSA("Flummig";A1:A8;0);PASSA("hårdrockare";A1:I1;0))

Ok, det där var höjden av meningslöshet, men det är säkert väldigt användbart om du har något slags hjälptabell som du vill slå upp värden i. Kanske anuitetstabell i en tabell med Ränta och Amorteringstid (idiotexempel eftersom det finns som funktion i excel, men men).

Ähh, men för att återgå till din ursprungsfråga. Letaupp är i princip omodernt och om du behöver funktionen så passar förmodligen kombinationen PASSA/INDEX bättre.

Kalle MMedlem sedan mars 20041 938 inlägg
#6

Med mitt exempel:
=LETARAD(A7;G10:H14;2)

Provade passa för skoj skull:
=PASSA(A7;G10:G14;0)

Den strejkar om man skulle haft namn i 2 kolumner(G och H) Dock mindre viktigt.
=PASSA(A7;G10:h14;0)

Men hur får jag ihop =PASSA(A7;G10:G14;0) med index?

Bifogar med en exempelfil man kan leka med :-)

MindreVetandeMedlem sedan okt. 2005362 inlägg
#7

Kalle M skrev:

Men hur får jag ihop =PASSA(A7;G10:G14;0) med index?

=INDEX(H10:H14;PASSA(A7;G10:G14;0))
Det första argumentet i INDEX, H10:H14, är alltså den lista med värden som du vill returnera ur. I letarad anges det med 2 argument: G10:H14;2 (2:a kolumnen i G10:H14, dvs H10:H14)
Det andra argumentet anger sedan vilken rad du vill returnera. I ditt fall så får PASSA räkna ut det. Det finns ett argument till som du inte använder (kolumn).
Det finns även en variant av INDEX som tar 4 argument, men den har jag aldrig använt, så jag vet inter riktigt vad Ref och Område gör.

Kalle M skrev:

Den strejkar om man skulle haft namn i 2 kolumner(G och H)

Tror inte att någon av "leta"-funktionerna fungerar med flera kolumner. Antar att de som skapade excel hade svårt att hitta ett vettig användningsområde. Normal sett identifierar man ju en person/uppgift i en kolumn och lägger alla data som hör till i en annan. Men du tänker dig någon ting i stil med för- och efternamn, eller?

Antag att:
Förnamn står i G10-G14
Efternamn står i H10-H14
Telefonnummer I10-I14

Antag att vi matar in det eftersökta förnamnet i A4 och efternamnet i B4.

Då kan du slå ihop cellerna och söka. Men det krävs en matrisformel. Dvs:
{=PASSA(A4&B4;G10:G14&H10:H14;0)}
eller "fuskvarianten" med produktsumma bara för att slippa hålla reda på dina "Ctrl+Shift+Enter":
=PRODUKTSUMMA(PASSA(A4&B4;G10:G14&H10:H14;0))
Slår du ihop den sista med INDEX så får du:
=INDEX(I10:I14;PRODUKTSUMMA(PASSA(A4&B4;G10:G14&H10:H14;0)))

Här får du ett alternativ som hemläxa:
=INDIREKT("I"&PRODUKTSUMMA((A4=G10:G14)*(B4=H10:H14)*RAD(G10:G14)))
Kan du lista ut hur det fungerar :stud

Kalle MMedlem sedan mars 20041 938 inlägg
#8

Innan jag försöker mig på ditt exempel så gjorde jag följande formel för att ersätta "Saknas" :-) :

=OM(ÄRSAKNAD(LETARAD(A7;G10:H14;2;0));"Finns ej";LETARAD(A7;G10:H14;2;0))

Kommentarer :-)

MindreVetandeMedlem sedan okt. 2005362 inlägg
#9

Lite "slöseri" att leta igenom två gånger, men jag känner inte till något annat sätt, och i ett så här litet material spelar det ingen roll. Så det får godkänt (y)

Om det hade varit en Bamsesökning som tog tid så hade jag skapat en "hjälpcell" med letarad. Sen hade jag lagt OM-vilkoret i den cell där jag ville ha svaret och kollat värdet i hjälpcellen. Då behöver sökningen bara gå en gång.

TosseMedlem sedan aug. 2004126 inlägg
#10

ANTAL.OM är lite snabbare än LETA-funktionerna

Kalle MMedlem sedan mars 20041 938 inlägg
#11

Fundering 1:
Nu har jag provat =INDEX(H10:H14;PASSA(A7;G10:G14;0))

Vad är det nu för skillnad på att använda formeln ovan och:

=LETARAD(A7;G10:H14;2;0)

Fundering 2

Funktionen LetaUpp är jag inte riktigt 100 på.
Jag väljer LetaUpp och första alternativet i dialogrutan och gör följande formel:
=LETAUPP(A7;G10:G14;H10:H14)

Får ju samma variant som Letarad i det här fallet!?
Är det sortering den inte klarar av eller vad?

Fundering 3:
Vad är en matris i excel egentligen? Har använt ctrl shift enter antal ggr men aldrig greppat riktigt varför. Vad är det som utmärker att det är en matris?

Fundering4:
Har man nån gång nytta av att enbart använda funktionen Index?

TosseMedlem sedan aug. 2004126 inlägg
#12

1:
Ingen skillnad i resultat, här skulle jag använda letarad - skulle tippa på att det är snabbare + att formeln blir kortare. Men hade värdet du ville ha stått till vänster om kolumnen du söker på hade du inte kunnat använda letarad.

3:
Matris-formler är formler som tar en vektor eller matris som input och/eller output.
T.ex. så är SUMMA, ANTAL, MEDEL faktiskt matris-formler. Men eftersom de endast kan fungera som matris-formler behöver man inte trycka ctrl+shift+enter.

I vissa fall kan man använda formler som inte är matris-formler med matriser genom att trycka ctrl+shift+enter. Ex: =Rad(A1:A3) ger resultatet 1, vilket är det första värdet i resultatet. Men om markerar tre celler, skriver samma sak och bekräftar med ctrl+shift+enter kommer du få 1,2,3 i dina tre celler.

MEDEL() tar en matris som input, men om vi vill ha medel på t.ex. alla positiva tal hur gör vi då?
OM-formeln är inte en matrisformel, men med ctrl-shift-enter kan vi använda den med matriser.
=OM(A1:A5>=0;A1:A5) kommer ge resultatet i A1 om det är större än noll
{=OM(A1:A5>=0;A1:A5)} kommer ge en vektor med värdena i A1:A5 om de är större än noll.
MEDEL tar en matris som input, alltså kan vi ge den en OM-sats bekräftad med ctrl+shift+enter:
{=MEDEL(OM(A1:A5>=0;A1:A5))}

Det här var nog en dålig förklaring... En matris är i alla fall i Excel precis som överallt annars ett område bestående av n rader och m kolumner.

4:
INDEX blir meningslös i sig själv, den används till att hämta ett värde i en matris där man inte vet vilken rad och/eller kolumn värdet står i. Alltså använder man den oftast tillsammans med PASSA eller ett resultat från någon anna beräkning.

Kalle MMedlem sedan mars 20041 938 inlägg
#13

Ok!

Tackar för det!

lecxeMedlem sedan okt. 200750 inlägg
#14

Ang LETAUPP() så kan den exempelvis användas i följande fall:

1. Hitta sista ifyllda talet i en kolumn --> =LETAUPP(9,99999999999999E+307;A:A)

2. Hitta sista ifyllda strängen i en kolumn --> =LETAUPP(REP("z";255);A:A)

3. Hitta kolumnindex för den sista kolumnen i en rad där värdet är skilt från tex "x" --> =LETAUPP(256;OM(20:20<>"x";KOLUMN(20:20))) inmatat som matrisformel.

osv.. LETAUPP() kan alltså vara användbart när man vill hitta den sista förekomsten av något. Det finns naturligtvis även andra formler som löser uppgifterna men LETAUPP() fungerar i detta fall bra.

/lecxe

MindreVetandeMedlem sedan okt. 2005362 inlägg
#15

Jag har sett trix av typen:
=LETAUPP(9,99999999999999E+307;A:A)
förut. Varför fungerar det egentligen? Rent logiskt borde den ju returnera det högsta värdet, inte det sista. Någon som vet?

lecxeMedlem sedan okt. 200750 inlägg
#16

LETAUPP() är egentligen en restprodukt i Excel som finns kvar för kompaitbilitet med andra program. Egentligen är LETAUPP() tänkt att fungera när värdena i vektorn eller matrisen är sorterade och i dessa fall fungerar LETARAD() eller LETAKOLUMN() på exakt samma sätt, förutsatt att argumentet "ungefärlig" sätts till SANT eller 1. Det som är intressant är att appilicera LETAUPP() på tex en vektor som inte är sorterad. I ett sådant fall anger hjälpen att "LETAUPP kanske inte ger rätt värde", dvs det värde man letar efter. Det finns dock en systematik i vilket "icke rätta värde" som returneras, nämligen det sista värdet i vektorn/matrisen. Det är detta faktum man kan utnyttja i formel av typen =LETAUPP(9,99999999999999E+307;A:A).

/lecxe

MindreVetandeMedlem sedan okt. 2005362 inlägg
#17

Tackar. Användarvarianten av "its not a bug, its a feature" alltså?
Finurligt. Antar att man tar ett "superhögt" värde bara för att vara säker på att provocera fram felet?

maha09Medlem sedan juli 200812 inlägg
#18

Leta antal värden i en kolumn givet visst villkor i en annan kolumn

Hejsan, jag har ett problem:
Tänk dig en kolumn med antal regioner, exv. Svergie, Östeuropa etc.
I en kolumn längre bort (till höger) står en massa värden . Nu vill jag helt enkelt räkna antal värden som har villkoret Östeuropa. Hur gör jag? Mycket glad för svar! / Mvh Macko. :OO

UrTristMedlem sedan juli 20087 inlägg
#19

=ANTAL.OM(A:A;"Östeuropa")
där AA är kolumnen med region
eller
=PRODUKTSUMMA((A1:A100="Östeuropa")*(ÄRTAL(C1:C100))*1)
om vilkoret är att det skall finnas ett tal i C också
eller
=SUMMA.OM(A:A;"Östeuropa";C:C)
om du vill summera värdet i C.

Ja, det går att trixa en hel del. PRODUKTSUMMA-varianten behövs inte i excel 2007. Där skall det finnas en antal.om() som klarar flera villkor.

maha09Medlem sedan juli 200812 inlägg
#20

Fick mer problem...

Har tyvärr inte excel 2007 ännu...

Mitt problem är att jag nu har en matris bestående av regioner (rader) och årtal (kolumner). Om jag sorterar på region "Östeuropa" får jag x antal träffar under kolumn år 2006 men y antal träffar om jag sorterar på kolumn år 2007. Om jag endast vill veta antal träffar för resp. år och resp. region, hur gör jag då? // M.
Svara! Blir tokig om jag inte får det löst...

Genererad på 388 ms · cache AV · v20260730165559-full.f96bc7eb