Dynamische bereiknamen gebruiken in Excel voor flexibele vervolgkeuzelijsten

Excel -spreadsheets bevatten vaak vervolgkeuzelijsten voor cellen om de gegevensinvoer te vereenvoudigen en/of te standaardiseren. Deze vervolgkeuzelijsten worden gemaakt met behulp van de gegevensvalidatiefunctie om een ​​lijst met toegestane items op te geven.

Om een ​​eenvoudige vervolgkeuzelijst in te stellen, selecteert u de cel waar de gegevens worden ingevoerd, klikt u op Gegevensvalidatie(Data Validation) (op het tabblad Gegevens ), selecteert u (Data)Gegevensvalidatie(Data Validation) , kiest u Lijst(List) (onder Toestaan(Allow) ​​:) en voert u vervolgens de lijstitems in (gescheiden door komma's) ) in het veld Bron(Source) : (zie afbeelding 1).

In dit type basisvervolgkeuzelijst wordt de lijst met toegestane items gespecificeerd in de gegevensvalidatie zelf; daarom moet de gebruiker de gegevensvalidatie openen en bewerken om wijzigingen in de lijst aan te brengen. Dit kan echter moeilijk zijn voor onervaren gebruikers of in gevallen waar de keuzelijst lang is.

Een andere optie is om de lijst in een benoemd bereik in het werkblad(named range within the spreadsheet) te plaatsen en vervolgens die bereiknaam op te geven (voorafgegaan door een gelijkteken) in het veld Bron(Source) : van de gegevensvalidatie (zoals weergegeven in Afbeelding 2(Figure 2) ).

Deze tweede methode maakt het gemakkelijker om de keuzes in de lijst te bewerken, maar het toevoegen of verwijderen van items kan problematisch zijn. Aangezien het benoemde bereik ( FruitChoices , in ons voorbeeld) verwijst naar een vast celbereik ($ H $ 3: $ H $ 10 zoals weergegeven), zullen als er meer keuzes worden toegevoegd aan de cellen H11 of lager, deze niet worden weergegeven in de vervolgkeuzelijst (aangezien die cellen geen deel uitmaken van het FruitChoices- assortiment).

Evenzo, als bijvoorbeeld de vermeldingen Peren(Pears) en Aardbeien(Strawberries) worden gewist, verschijnen ze niet langer in de vervolgkeuzelijst, maar in plaats daarvan bevat de vervolgkeuzelijst twee "lege" keuzes omdat de vervolgkeuzelijst nog steeds verwijst naar het volledige FruitChoices-bereik, inclusief de lege cellen H9 en H10 .

Om deze redenen moet, wanneer een normaal benoemd bereik als lijstbron voor een vervolgkeuzelijst wordt gebruikt, het benoemde bereik zelf worden bewerkt om meer of minder cellen op te nemen als items worden toegevoegd aan of verwijderd uit de lijst.

Een oplossing voor dit probleem is het gebruik van een dynamische(dynamic) bereiknaam als bron voor de vervolgkeuzemenu's. De naam van een dynamisch bereik is een naam die automatisch wordt uitgebreid (of samengetrokken) om exact overeen te komen met de grootte van een gegevensblok wanneer items worden toegevoegd of verwijderd. Om dit te doen, gebruikt u een formule(formula) , in plaats van een vast bereik van celadressen, om het benoemde bereik te definiëren.

Een dynamisch bereik(Dynamic Range) instellen in Excel

Een normale (statische) bereiknaam verwijst naar een gespecificeerd celbereik ($H$3:$H$10 in ons voorbeeld, zie hieronder):

Maar een dynamisch bereik wordt gedefinieerd met behulp van een formule (zie hieronder, overgenomen uit een aparte spreadsheet die namen van dynamisch bereik gebruikt):

Voordat we beginnen, zorg ervoor dat u ons Excel-voorbeeldbestand downloadt  (sorteermacro's zijn uitgeschakeld).

Laten we deze formule in detail bekijken. De keuzes voor Fruit staan ​​in een blok cellen direct onder een kop ( VRUCHTEN(FRUITS) ). Die kop krijgt ook een naam: FruitsHeading :

De volledige formule die wordt gebruikt om het dynamische bereik voor de Fruits- keuzes te definiëren, is:

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

FruitsHeading verwijst naar de kop die één rij boven het eerste item in de lijst staat. Het getal 20 (twee keer gebruikt in de formule) is de maximale grootte (aantal rijen) voor de lijst (deze kan naar wens worden aangepast).

Merk op dat er in dit voorbeeld slechts 8 items in de lijst staan, maar er zijn ook lege cellen eronder waar extra items kunnen worden toegevoegd. Het getal 20 verwijst naar het hele blok waar boekingen kunnen worden gedaan, niet naar het daadwerkelijke aantal boekingen.

Laten we nu de formule in stukjes opsplitsen (elk stuk kleurcodering), om te begrijpen hoe het werkt:

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

Het "binnenste" stuk is OFFSET(FruitsHeading,1,0,20,1) . Dit verwijst naar het blok van 20 cellen (onder de cel FruitsHeading ) waar keuzes kunnen worden ingevoerd. Deze OFFSET - functie zegt in feite: Begin bij de FruitsHeading -cel, ga 1 rij omlaag en meer dan 0 kolommen, selecteer vervolgens een gebied dat 20 rijen lang en 1 kolom breed is. Dus dat geeft ons het blok met 20 rijen waar de Fruits - keuzes worden ingevoerd.

Het volgende stuk van de formule is de ISBLANK- functie:

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

Hier is de OFFSET- functie (hierboven uitgelegd) vervangen door "the above" (om de zaken leesbaarder te maken). Maar de ISBLANK -functie werkt op het 20-rijenbereik van cellen dat de OFFSET - functie definieert.

ISBLANK maakt vervolgens een set van 20 TRUE- en FALSE -waarden, waarmee wordt aangegeven of elk van de afzonderlijke cellen in het bereik van 20 rijen waarnaar wordt verwezen door de OFFSET - functie, leeg (leeg) is of niet. In dit voorbeeld zijn de eerste 8 waarden in de set ONWAAR(FALSE) omdat de eerste 8 cellen niet leeg zijn en de laatste 12 waarden TRUE zijn .

Het volgende stuk van de formule is de INDEX- functie:

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

Nogmaals, "het bovenstaande" verwijst naar de hierboven beschreven ISBLANK- en OFFSET - functies. De INDEX -functie retourneert een array met de 20 TRUE / FALSE - waarden die zijn gemaakt door de ISBLANK- functie.

INDEX wordt normaal gesproken gebruikt om een ​​bepaalde waarde (of reeks waarden) uit een gegevensblok te halen, door een bepaalde rij en kolom (binnen dat blok) op te geven. Maar door de rij- en kolominvoer op nul te zetten (zoals hier wordt gedaan), geeft INDEX een array terug die het hele gegevensblok bevat.

Het volgende stuk van de formule is de MATCH- functie:

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

De MATCH - functie retourneert de positie van de eerste TRUE -waarde, binnen de array die wordt geretourneerd door de INDEX - functie. Aangezien de eerste 8 items in de lijst niet leeg zijn, zullen de eerste 8 waarden in de array FALSE zijn en de negende waarde TRUE (aangezien de 9e rij in het bereik leeg is).

Dus de MATCH- functie retourneert de waarde van 9 . In dit geval willen we echter echt weten hoeveel items er in de lijst staan, dus de formule trekt 1 af van de MATCH -waarde (die de positie van het laatste item geeft). Dus uiteindelijk geeft MATCH ( TRUE ,the above,0)-1 de waarde 8 terug .

Het volgende stuk van de formule is de IFERROR- functie:

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

De functie IFERROR retourneert een alternatieve waarde als de eerste opgegeven waarde in een fout resulteert. Deze functie is inbegrepen omdat, als het hele blok cellen (alle 20 rijen) is gevuld met items, de MATCH - functie een fout retourneert.

Dit komt omdat we de MATCH- functie vertellen om te zoeken naar de eerste TRUE -waarde (in de array met waarden van de ISBLANK- functie), maar als GEEN(NONE) van de cellen leeg is, wordt de hele array gevuld met FALSE - waarden. Als MATCH de doelwaarde ( TRUE ) niet kan vinden in de matrix die het zoekt, wordt er een fout geretourneerd.

Dus als de hele lijst vol is (en daarom MATCH een fout retourneert), retourneert de IFERROR- functie in plaats daarvan de waarde 20 (wetend dat er 20 items in de lijst moeten zijn).

Ten slotte geeft OFFSET(FruitsHeading,1,0,the above,1) het bereik terug waarnaar we eigenlijk op zoek zijn: begin bij de cel FruitsHeading , ga 1 rij omlaag en meer dan 0 kolommen, selecteer vervolgens een gebied dat zoveel rijen lang is als er zijn vermeldingen in de lijst (en 1 kolom breed). Dus de hele formule samen retourneert het bereik dat alleen de daadwerkelijke vermeldingen bevat (tot aan de eerste lege cel).

Als u deze formule gebruikt om het bereik te definiëren dat de bron is voor de vervolgkeuzelijst, kunt u de lijst vrij bewerken (vermeldingen toevoegen of verwijderen, zolang de resterende vermeldingen in de bovenste cel beginnen en aaneengesloten zijn) en de vervolgkeuzelijst altijd de huidige weergeeft lijst (zie figuur 6(Figure 6) ).

Het voorbeeldbestand (Dynamic Lists) dat hier is gebruikt, is bijgevoegd en kan worden gedownload van deze website. De macro's werken echter niet, omdat WordPress niet houdt van Excel- boeken met macro's erin.

Als alternatief voor het specificeren van het aantal rijen in het lijstblok, kan het lijstblok een eigen bereiknaam krijgen, die vervolgens in een aangepaste formule kan worden gebruikt. In het voorbeeldbestand gebruikt een tweede lijst ( Namen(Names) ) deze methode. Hier krijgt het hele lijstblok (onder de kop "NAMES", 40 rijen in het voorbeeldbestand) de bereiknaam NameBlock toegewezen(NameBlock) . De alternatieve formule voor het definiëren van de NamesList is dan:

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

waarbij NamesBlock OFFSET ( FruitsHeading,1,0,20,1 ) vervangt en ROWS(NamesBlock) de 20 (aantal rijen) in de eerdere formule vervangt.

Dus, voor vervolgkeuzelijsten die gemakkelijk kunnen worden bewerkt (ook door andere gebruikers die mogelijk onervaren zijn), probeer dynamische bereiknamen te gebruiken! En merk op dat, hoewel dit artikel is gericht op vervolgkeuzelijsten, dynamische bereiknamen overal kunnen worden gebruikt waar u naar een bereik of lijst wilt verwijzen die in grootte kan variëren. Genieten van!



About the author

Ik ben een computerprofessional met meer dan 10 jaar ervaring. In mijn vrije tijd help ik graag aan een bureau en leer ik kinderen internetten. Mijn vaardigheden omvatten veel dingen, maar het belangrijkste is dat ik weet hoe ik mensen kan helpen bij het oplossen van problemen. Als je iemand nodig hebt die je kan helpen met iets dringends of gewoon wat basistips wilt, neem dan contact met me op!



Related posts