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

Returnera lista (matris) med textsträngar från databas


c_enegren

Rekommendera Poster

Hej,

 

Har ett problem i samband med jobb i en stor databas. Vill få fram förnamnen på alla personer som uppfyller ett gäng kriterier, såsom exempelvis födelsedatum, kön och födelseort.

 

Jag kommer inte kunna redigera listan och flytta ut vissa data, då tanken är att databasen ska uppdateras, och i samband med detta ska formlerna fungera.

 

Idag ser databasen förenklat ut såhär;

 

Förnamn Efternamn Födelsedatum Födelseort Kön

Carl Svensson 1990-01-10 Göteborg Man

Erik Larsson 1989-02-13 Varberg Man

Lars Larsson 1989-03-18 Varberg Man

Erika Eriksson 1989-04-23 Göteborg Kvinna

Bengta Bengtsson 1987-05-20 Varberg Kvinna

 

 

Jag vill alltså ha möjligheten att genom att fylla i,

efternamn: larsson

kön: man

födelseort: varberg

kunna returnera en lista (matris), med följande innehåll:
Erik

Lars

 

 

Tack på förhnad

Länk till kommentar
Dela på andra webbplatser

Har du testat om tabellfunktionen gör det du vill?

Dvs om du gör om din "databas" till en tabell (fliken "infoga"->tabeller->tabell ([ALT]+n+T))

Nu kan du lätt använd excels inbyggda filter (klicka på rubrikerna så får du fram filter för varje variabel)

Slutresultatet är att din orginaldatabas blir filtrerad. Räcker det eller vill du ha resultatet till en annan plats och lämna "databasen" garanterat orörd?

 

Ja, den ska helst vara orörd. Bifogar en fil där jag tydligare visar hur det hela är uppställt (förenklat)... Jag vill alltså returnera en matris utifrån de villkor jag själv fyller i.

 

Det handlar alltså om att på något sätt söka igenom databasen, spara de poster/rader som uppfyller villkoren och sedan returnera en matris med text från en given kolumn i materialet (I exemplet förnamn). 

exempel idg.xlsx

Länk till kommentar
Dela på andra webbplatser

Hur stor databas? Om många poster kan en lösning med produktsumma bli ganska seg minst sagt.

 

 

Avancerat filter, som redan har nämnts, kan fås att fungera bättre imho.

Länk till kommentar
Dela på andra webbplatser

Hur stor databas? Om många poster kan en lösning med produktsumma bli ganska seg minst sagt.

 

 

Avancerat filter, som redan har nämnts, kan fås att fungera bättre imho.

 

Ca 5000 rader och ca 300 kolumner :/ Med möjligheten att uppdatera den ytterligare med fler rader i takt med att fler observationer tillkommer...

 

Ok, så här kan du få ut det du vill (förenklat exempel, kollar bara efter efternamn och födelseort-bygg vidare). 

 

Kopiera in följande formel i någon cell , kopiera ner så många rader du tror kan bli aktuella

=OM(RAD(A1)>ANTAL.OMF($B$1:$B$1000;$J$5;$D$1:$D$1000;$J$7);"";INDEX($A$1:$A$1000;PRODUKTSUMMA(STÖRSTA(($B$1:$B$1000=$J$5)*($D$1:$D$1000=$J$7)*RAD($A$1:$A$1000);RAD(A1)))))

 

 

Samma sak med Kod-flagga om Eforum förstör formatet

=OM(RAD(A1)>ANTAL.OMF($B$1:$B$1000;$J$5;$D$1:$D$1000;$J$7);"";INDEX($A$1:$A$1000;PRODUKTSUMMA(STÖRSTA(($B$1:$B$1000=$J$5)*($D$1:$D$1000=$J$7)*RAD($A$1:$A$1000);RAD(A1)))))

Den första delen kan du strunta i just nu. Den kollar bara hur många rader som uppfyller kriterierna och returnerar sedan "" utan att köra formeln. 

=OM(RAD(A1)>ANTAL.OMF($B$1:$B$1000;$J$5;$D$1:$D$1000;$J$7);"";

 

Resten får du försöka lista ut :-)

 

INDEX($A$1:$A$1000;PRODUKTSUMMA(STÖRSTA(($B$1:$B$1000=$J$5)*($D$1:$D$1000=$J$7)*RAD($A$1:$A$1000);RAD(A1))))

 

Detta returnerar visserligen ett av två rätta namn, men jag får inte funktionen att returnera en matris, dvs i detta fall två namn. Någon input på det måntro?

Länk till kommentar
Dela på andra webbplatser

En matris kan iofs formler returnera (och det gör på sätt och vis denna funktion) men för att ta ut värdena måste du lyfta ut dem ur matrisen, dvs det som INDEX-delen i funktionen ovan gör.

 

Skriv in formeln på rad 1 i din bok, kopiera ned så många rader du kan behöver.

Då får du fram alla (för)namn

 

Fast en liten modifikation

i exempelvis cell L1 skriv

=OM(M1=0;"";INDEX($A$1:$A$1000;M1))

i cell M1 skriv

=PRODUKTSUMMA(STÖRSTA(($B$1:$B$1000=$J$5)*($D$1:$D$1000=$J$7)*($C$1:$C$1000>=DATUM($J$6;1;1))*($C$1:$C$1000<=DATUM($J$6;12;31))*RAD($A$1:$A$1000);RAD(A1)))

 

och kopiera ned så många rader du behöver.

 

nu tas även datum omhand.

Men notera att du kan inte ha något sökfält tomt. Det går att läsa så att det går men det tar vi i nästa inlägg om du vill.

Formeln blir än mer komplex.

 

men som sagt, avancerat filter...

Länk till kommentar
Dela på andra webbplatser

Detta måste vara den överlägset enklaste lösningen:

Kopiera hela databasen till ett eget excelblad. Använd excels tabellfunktioner eller avancerat filter och när du filtrerat listan så kopierar man det som fortfarande visas av förnamnskolumnen till önskat ställe. Du slipper en massa långa funktioner som kan ställa till problem.

 

Alternativt använd pivottabell.

 

Ska man alltid göra exakt samma filtrering så hade jag skapat en Queryfråga via flik Data och "Från andra källor".

 

Vad ska resultatet användas till?

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...