Använd dynamiska intervallnamn i Excel för flexibla rullgardinsmenyer

Excel -kalkylblad innehåller ofta cellrullgardinsmenyer för att förenkla och/eller standardisera datainmatning. Dessa rullgardinsmenyer skapas med hjälp av datavalideringsfunktionen för att ange en lista över tillåtna poster.

För att skapa en enkel rullgardinslista, välj cellen där data ska matas in, klicka sedan på Datavalidering(Data Validation) (på fliken Data ), välj (Data)Datavalidering(Data Validation) , välj Lista(List) (under Tillåt(Allow) :) och skriv sedan listobjekten (avgränsade med kommatecken) ) i fältet Källa(Source) : (se figur 1).

I denna typ av grundläggande rullgardinsmeny anges listan över tillåtna poster i själva datavalideringen; Därför måste användaren öppna och redigera datavalideringen för att göra ändringar i listan. Detta kan dock vara svårt för oerfarna användare, eller i fall där listan med val är lång.

Ett annat alternativ är att placera listan i ett namngivet intervall i kalkylarket(named range within the spreadsheet) och sedan ange det intervallnamnet (förord ​​med ett likhetstecken) i fältet Källa(Source) : för datavalideringen (som visas i figur 2(Figure 2) ).

Denna andra metod gör det lättare att redigera valen i listan, men att lägga till eller ta bort objekt kan vara problematiskt. Eftersom det namngivna intervallet ( FruitChoices , i vårt exempel) refererar till ett fast intervall av celler ($H$3:$H$10 som visas), om fler val läggs till i cellerna H11 eller nedan, kommer de inte att visas i rullgardinsmenyn (eftersom dessa celler inte är en del av FruitChoices- sortimentet).

På samma sätt, om till exempel posterna Päron(Pears) och Jordgubbar(Strawberries) raderas, kommer de inte längre att visas i rullgardinsmenyn, utan istället kommer rullgardinsmenyn att innehålla två "tomma" val eftersom rullgardinsmenyn fortfarande refererar till hela FruitChoices-intervallet, inklusive de tomma cellerna H9 och H10 .

Av dessa skäl, när du använder ett normalt namngivet område som listkälla för en rullgardinsmeny, måste själva namngivna området redigeras för att inkludera fler eller färre celler om poster läggs till eller tas bort från listan.

En lösning på detta problem är att använda ett dynamiskt(dynamic) områdesnamn som källa för valen i rullgardinsmenyn. Ett dynamiskt intervallnamn är ett namn som automatiskt utökas (eller dras samman) för att exakt matcha storleken på ett datablock när poster läggs till eller tas bort. För att göra detta använder du en formel(formula) , snarare än ett fast intervall av celladresser, för att definiera det namngivna intervallet.

Hur man ställer in ett dynamiskt intervall(Dynamic Range) i Excel

Ett normalt (statiskt) intervallnamn hänvisar till ett specificerat cellintervall ($H$3:$H$10 i vårt exempel, se nedan):

Men ett dynamiskt intervall definieras med en formel (se nedan, hämtat från ett separat kalkylblad som använder dynamiska intervallnamn):

Innan vi börjar, se till att du laddar ner vår Excel-exempelfil  (sorteringsmakron har inaktiverats).

Låt oss undersöka denna formel i detalj. Alternativen för Frukt finns i ett cellblock direkt under en rubrik ( FRUKTER(FRUITS) ). Den rubriken har också fått ett namn: FruitsHeading :

Hela formeln som används för att definiera det dynamiska intervallet för Frukt-(Fruits) valen är:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

FruitsHeading hänvisar till rubriken som är en rad ovanför den första posten i listan. Siffran 20 (används två gånger i formeln) är den maximala storleken (antal rader) för listan (detta kan justeras efter önskemål).

Observera att i det här exemplet finns det bara 8 poster i listan, men det finns även tomma celler under dessa där ytterligare poster kan läggas till. Siffran 20 hänvisar till hela blocket där poster kan göras, inte till det faktiska antalet poster.

Låt oss nu dela upp formeln i bitar (färgkoda varje del), för att förstå hur det fungerar:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

Den "innersta" biten är OFFSET(FruitsHeading,1,0,20,1) . Detta refererar till blocket med 20 celler (under FruitsHeading -cellen) där val kan anges. Denna OFFSET- funktion säger i princip: Börja vid FruitsHeading -cellen, gå ner 1 rad och över 0 kolumner, välj sedan ett område som är 20 rader långt och 1 kolumn brett. Så det ger oss blocket med 20 rader där Frukt(Fruits) - valen anges.

Nästa del av formeln är ISBLANK- funktionen:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(the above),0,0),0)-1,20),1)

Här har OFFSET- funktionen (förklarad ovan) ersatts med "det ovan" (för att göra saker lättare att läsa). Men ISBLANK- funktionen fungerar på det 20-radiga cellområdet som OFFSET- funktionen definierar.

ISBLANK skapar sedan en uppsättning av 20 TRUE och FALSE- värden, som indikerar om var och en av de individuella cellerna i det 20-radsintervall som refereras till av OFFSET- funktionen är tom (tom) eller inte. I det här exemplet kommer de första 8 värdena i uppsättningen att vara FALSE eftersom de första 8 cellerna inte är tomma och de sista 12 värdena kommer att vara TRUE .

Nästa del av formeln är INDEX- funktionen:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(the above,0,0),0)-1,20),1)

Återigen, "ovanstående" syftar på ISBLANK- och OFFSET- funktionerna som beskrivs ovan. Funktionen INDEX returnerar en array som innehåller de 20 TRUE / FALSE värdena som skapats av ISBLANK- funktionen.

INDEX används normalt för att välja ett visst värde (eller värdeintervall) från ett datablock, genom att specificera en viss rad och kolumn (inom det blocket). Men att ställa in rad- och kolumningångarna till noll (som görs här) gör att INDEX returnerar en array som innehåller hela datablocket.

Nästa del av formeln är MATCH- funktionen:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,the above,0)-1,20),1)

MATCH -(MATCH) funktionen returnerar positionen för det första TRUE- värdet, inom den matris som returneras av INDEX- funktionen. Eftersom de första 8 posterna i listan inte är tomma, kommer de första 8 värdena i arrayen att vara FALSE och det nionde värdet är TRUE (eftersom den 9 :e raden i intervallet är tom).

MATCH- funktionen returnerar värdet 9 . I det här fallet vill vi dock verkligen veta hur många poster som finns i listan, så formeln subtraherar 1 från MATCH- värdet (vilket ger positionen för den sista posten). Så i slutändan returnerar MATCH ( TRUE ,ovanstående,0)-1 värdet 8 .

Nästa del av formeln är IFERROR- funktionen:

=OFFSET(FruitsHeading,1,0,IFERROR(the above,20),1)

Funktionen IFERROR returnerar ett alternativt värde om det första angivna värdet resulterar i ett fel. Denna funktion ingår eftersom, om hela blocket av celler (alla 20 rader) är fyllda med poster, kommer MATCH- funktionen att returnera ett fel.

Detta beror på att vi säger till MATCH- funktionen att leta efter det första TRUE- värdet (i arrayen av värden från ISBLANK- funktionen), men om INGEN(NONE) av cellerna är tomma, kommer hela arrayen att fyllas med FALSE- värden. Om MATCH inte kan hitta målvärdet ( TRUE ) i den array som den söker returnerar den ett fel.

Så om hela listan är full (och därför MATCH returnerar ett fel), returnerar funktionen IFERROR istället värdet 20 (med vetskapen om att det måste finnas 20 poster i listan).

Slutligen, OFFSET(FruitsHeading,1,0,the above,1) returnerar intervallet vi faktiskt letar efter: Börja vid FruitsHeading -cellen, gå ner 1 rad och över 0 kolumner, välj sedan ett område som är hur många rader som helst som det finns poster i listan (och 1 kolumn bred). Så hela formeln tillsammans kommer att returnera intervallet som bara innehåller de faktiska posterna (ned till den första tomma cellen).

Att använda den här formeln för att definiera intervallet som är källan för rullgardinsmenyn innebär att du fritt kan redigera listan (lägga till eller ta bort poster, så länge som de återstående posterna börjar i den översta cellen och är sammanhängande) och rullgardinsmenyn kommer alltid att spegla den aktuella lista (se figur 6(Figure 6) ).

Exempelfilen (Dynamic Lists) som har använts här ingår och kan laddas ner från denna webbplats. Makron fungerar dock inte eftersom WordPress inte gillar Excel- böcker med makron i.

Som ett alternativ till att ange antalet rader i listblocket kan listblocket tilldelas ett eget områdesnamn, som sedan kan användas i en modifierad formel. I exempelfilen använder en andra lista ( Names ) denna metod. Här tilldelas hela listblocket (under rubriken "NAMES", 40 rader i exempelfilen) intervallnamnet NameBlock . Den alternativa formeln för att definiera NamesList är då:

=OFFSET(NamesHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(NamesBlock),0,0),0)-1,ROWS(NamesBlock)),1)

där NamesBlock ersätter OFFSET ( FruitsHeading,1,0,20,1 ) och ROWS(NamesBlock) ersätter 20 (antal rader) i den tidigare formeln.

Så, för rullgardinslistor som enkelt kan redigeras (inklusive av andra användare som kanske är oerfarna), försök använda dynamiska intervallnamn! Och notera att även om den här artikeln har fokuserat på rullgardinslistor, kan dynamiska intervallnamn användas var som helst du behöver för att referera till ett intervall eller en lista som kan variera i storlek. Njut av!



About the author

"Jag är en frilansande Windows- och Office-expert. Jag har över 10 års erfarenhet av att arbeta med dessa verktyg och kan hjälpa dig att få ut det mesta av dem. Mina färdigheter inkluderar: arbeta med Microsoft Word, Excel, PowerPoint och Outlook; skapa webben sidor och applikationer; och hjälpa kunder att nå sina affärsmål."



Related posts