PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelSamköra filer - Letarad, mer avanceratSamköra filer - Letarad, mer avancerat
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2020-11-19 14:18
 

Hej,

Jag har flera filerer med ett antal 100 k rader styck. Varje rad står för en händelse. Vi kan kalla filen matris A. I matris A saknas värdet i en kolumn som beskriver radens "tillhörighet". I matris A finns dock en kolumn med ett  kundnummer. Samma kundnummer finns på ett antal 1000 rader i Matris A.

Samma kundnummer finns en annan fil (Matris B), som har den kolumn som saknas i matris A. 

I matris B finns det 36 kolumner, med kundnummer samt tillhörighet. I matrix B är varje kundnummer unikt för varje rad. 

kolmun A       Kolum B           Kolum C        Kolum D

Tillhörighet  Kundnummer    Tillhörighet    Kundnummer

x                 Kundnummer1         y             Kundnummer4

x                 Kundnummer2         y             Kundnummer5

x                 Kundnummer3         y             Kundnummer6

 

I dagsläget använder jag mig av letarad i matris A för att identifiera vilka kundnummer som har tillhörighet X, Y ... (tills alla har fått sin tillhörighet, finns som sagt 18 tillhörigheter). Problemet är att det blir sjukt mycket repetition. Jag gör lixom:

I A1: =letarad(kundummer; matrisB!B1:BX;1;FALSKT) .......  sorterar bort saknas och namnger tillhörigheten, i detta fall X. Sen upprepar jag processen tills alla 18 tillhörigheter har tilldelats. Denna process är inte helt hållbar. 

 

Eftersom alla kundnummer i MatrisB är unika så skulle jag vilja göra (detta är inte rätt, men ni kanske förstår tänket) 

i cell A1, Matris A

=om(letarad(kundnummer;matrisB!B1:BX;1;FALSKT)else(letarad(kundnummer;matrisB!D1;DX).... osv så att alla 18 tillhörigheter täcks in. 

HJÄLP! Är jag något på spåren med ovanstående funktion, om jag fixar komumnindexet för respektive letarad-funktion (vill ju att tillhörigheten ska tilldelas och inte uppnå resultatet #saknas eller att kundnummer har matchats)

Eller finns det andra tillvägagångssätt, andra funktioner som hanterar detta bättre? 

 

Nytt inlägg
 2020-11-19 15:17
 
 Ändrad av anonymous  på 2020-11-19 15:21:42

En variant är att tvinga formeln att ge "" när den inte får en träff

=OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);"")

sen sammanfogar du bara svaret från alla kolumnpar (det blir ju "" när det inte finns träff) (förutsätter att det inte finns dubletter)

=OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);"")&OMFEL(LETARAD(kundummer;matrisB!C:D;2;FALSKT);"")&.....

Det blir en lång formel, men du behöver bara göra  den en gång

Du kan även utnyttja att 

LETARAD(kundummer;matrisB!A:B;2;FALSKT)

Ger ett felmeddelande om detn inte får träff. Så om det blir fel så går den vidare till nästa. 

=OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);"nästa formel")

Exempel med 2 nivåer

=OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);OMFEL(LETARAD(kundummer;matrisB!C:D;2;FALSKT);"nästa formel"))

3 nivåer

=OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);OMFEL(LETARAD(kundummer;matrisB!C:D;2;FALSKT);OMFEL(LETARAD(kundummer;matrisB!A:B;2;FALSKT);"nästa formel")))

Fördelen jämfört med föregående formel är att den bara körs så länge det behövs. I Den första formeln körs ju  alla delformler. Nackdelen är att du kommer att snubbla över paranteser efter ett tag.

 

Nytt inlägg
 2020-11-20 08:35
 

 Hej hej

Om det stämmer som du säger att du har 100k+ rader. Så är risken/sannolikheten att filen blir stor och seg rätt stor när du lägger in en så lång formel. Tänk på att varje tecken i en cell sparas, detta innebär att en megaformel med 18 nästningar, på 100k+ platser, kommer ta upp rätt mycket plats. Formeln är dessutom ganska tung, Vidare så är det inte särskilt hållbart att underhålla en sådan formel, vad händer exempelvis om nya rader läggs till i matris B? Ska du uppdatera på 18 platser varje gång?. Vad är det som gör att du måste ha 36 kolumner i matris B? 

Skulle det gå att ordna om så att du får två kolumner istället för 36 så är det helt klart bästa lösningen. 

/c

Nytt inlägg
 2020-11-20 14:23
 

 Hej,

Tusen tack. Det fungerade! Tog sin tid dock :)

 

/Axel

Nytt inlägg
 2020-11-20 14:24
 

 Där sa du något...

Självklart kan jag bygga ihop det till två kolumner, och spara oändligt med tid. TACK!

/Axel

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelSamköra filer - Letarad, mer avanceratSamköra filer - Letarad, mer avancerat

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter