VBA dynamisch bereik

Dit artikel laat zien hoe u een dynamisch bereik kunt maken in Excel VBA.

Het declareren van een specifiek cellenbereik als een variabele in Excel VBA beperkt ons tot het werken met alleen die specifieke cellen. Door dynamische bereiken in Excel te declareren, krijgen we veel meer flexibiliteit over onze code en de functionaliteit die deze kan uitvoeren.

Verwijzen naar bereiken en cellen

Wanneer we verwijzen naar het bereik- of celobject in Excel, verwijzen we er normaal gesproken naar door hard te coderen in de rij en kolommen die we nodig hebben.

Bereik eigenschap

Met behulp van de Range-eigenschap, in de onderstaande voorbeeldregels code, kunnen we acties op dit bereik uitvoeren, zoals het wijzigen van de kleur van de cellen of het vet maken van de cellen.

12 Bereik ("A1:A5"). Lettertypekleur = vbRoodBereik ("A1:A5"). Lettertype. Vet = True

Cellen eigenschap

Op dezelfde manier kunnen we de eigenschap Cellen gebruiken om naar een celbereik te verwijzen door rechtstreeks te verwijzen naar de rij en kolom in de eigenschap cellen. De rij moet altijd een getal zijn, maar de kolom kan een getal zijn of een letter tussen aanhalingstekens.

Er kan bijvoorbeeld naar het celadres A1 worden verwezen als:

1 Cellen(1,1)

Of

1 Cellen (1, "A")

Om de eigenschap Cellen te gebruiken om naar een celbereik te verwijzen, moeten we het begin van het bereik en het einde van het bereik aangeven.

Om bijvoorbeeld naar het bereik A1: A6 te verwijzen, kunnen we deze syntaxis hieronder gebruiken:

1 Bereik(Cellen(1,1), Cellen(1,6)

We kunnen dan de eigenschap Cellen gebruiken om acties op het bereik uit te voeren volgens de onderstaande voorbeeldregels code:

12 Bereik (Cellen (2, 2), Cellen (6, 2)). Lettertype Kleur = vbRedBereik (cellen (2, 2), cellen (6, 2)). Lettertype. Vet = True

Dynamische bereiken met variabelen

Aangezien de grootte van onze gegevens in Excel verandert (d.w.z. we gebruiken meer rijen en kolommen dan de bereiken die we hebben gecodeerd), zou het handig zijn als de bereiken waarnaar we verwijzen in onze code ook zouden veranderen. Met behulp van het bovenstaande Range-object kunnen we variabelen maken om de maximale rij- en kolomnummers van het gebied van het Excel-werkblad dat we gebruiken op te slaan, en deze variabelen gebruiken om het Range-object dynamisch aan te passen terwijl de code wordt uitgevoerd.

Bijvoorbeeld

1234 Dim lRij als geheel getalDim lCol als geheel getallRij = Bereik ("A1048576"). Einde (xlOmhoog). RijlKol = Bereik ("XFD1").Einde(xlNaarLinks).Kolom

Laatste rij in kolom

Aangezien er 1048576 rijen in een werkblad zijn, gaat de variabele lRow naar de onderkant van het werkblad en gebruikt dan de speciale combinatie van de End-toets plus de pijl-omhoog-toets om naar de laatste rij te gaan die in het werkblad is gebruikt - dit geeft ons het nummer van de rij die we nodig hebben in ons assortiment.

Laatste kolom in rij

Op dezelfde manier gaat de lCol naar Kolom XFD, de laatste kolom in een werkblad, en gebruikt dan de speciale toetsencombinatie van de End-toets plus de linkerpijltoets om naar de laatste kolom te gaan die in het werkblad wordt gebruikt - dit geeft ons de nummer van de kolom die we nodig hebben in ons assortiment.

Daarom kunnen we de volgende code uitvoeren om het volledige bereik te krijgen dat in het werkblad wordt gebruikt:

1234567891011 Sub GetRange()Dim lRij als geheel getalDim lCol As IntegerDim rng als bereiklRij = Bereik ("A1048576"). Einde (xlOmhoog). Rij'gebruik de lRow om de laatste kolom in het bereik te vinden'lKol = Bereik ("XFD" & lRij).Einde(xlNaarLinks).KolomStel rng = Bereik (Cellen (1, 1), Cellen (lRij, lCol))'msgbox om ons het assortiment te laten zienMsgBox "Bereik is " & rng.AdresEinde sub

SpecialCells - LastCell

We kunnen ook de SpecialCells-methode van het Range-object gebruiken om de laatste rij en kolom te krijgen die in een werkblad wordt gebruikt.

123456789101112 SubgebruikSpecialCells()Dim lRij als geheel getalDim lCol As IntegerDim rng als bereikDim rngBegin als bereikStel rngBegin = Bereik ("A1") inlRij = rngBegin.SpecialCells(xlCellTypeLastCell).RijlCol = rngBegin.SpecialCells(xlCellTypeLastCell).KolomStel rng = Bereik (Cellen (1, 1), Cellen (lRij, lCol))'msgbox om ons het assortiment te laten zienMsgBox "Bereik is " & rng.AdresEinde sub

GebruiktBereik

De methode Gebruikte bereik omvat alle cellen die waarden bevatten in het huidige werkblad.

123456 Sub GebruiktBereikVoorbeeld()Dim rng als bereikStel rng = ActiveSheet.UsedRange in'msgbox om ons het assortiment te laten zienMsgBox "Bereik is " & rng.AdresEinde sub

HuidigeRegio

Het huidige gebied verschilt van het UsedRange doordat het kijkt naar de cellen die een cel omringen die we als startbereik hebben gedeclareerd (dwz de variabele rngBegin in het onderstaande voorbeeld), en vervolgens kijkt naar alle cellen die 'bijgevoegd' of geassocieerd zijn naar die aangegeven cel. Mocht er een lege cel in een rij of kolom voorkomen, dan stopt de CurrentRegion met zoeken naar verdere cellen.

12345678 Sub huidige regio()Dim rng als bereikDim rngBegin als bereikStel rngBegin = Bereik ("A1") inStel rng = rngBegin.CurrentRegion in'msgbox om ons het assortiment te laten zienMsgBox "Bereik is " & rng.AdresEinde sub

Als we deze methode gebruiken, moeten we ervoor zorgen dat alle cellen in het bereik dat u nodig hebt, zijn verbonden zonder lege rijen of kolommen ertussen.

Benoemd bereik

We kunnen ook verwijzen naar Named Ranges in onze code. Benoemde bereiken kunnen dynamisch zijn voor zover wanneer gegevens worden bijgewerkt of ingevoegd, de bereiknaam kan worden gewijzigd om de nieuwe gegevens op te nemen.

In dit voorbeeld wordt het lettertype vetgedrukt voor de bereiknaam "Januari"

12345 Sub RangeNameExample()Dim rng als bereikStel rng = Bereik ("januari") inrng.Font.Bold = = TrueEinde sub

Zoals u in de onderstaande afbeelding zult zien, wordt als een rij wordt toegevoegd aan de bereiknaam, de bereiknaam automatisch bijgewerkt om die rij op te nemen.

Als we vervolgens de voorbeeldcode opnieuw zouden uitvoeren, zou het bereik dat door de code wordt beïnvloed C5:C9 zijn, terwijl dit in eerste instantie C5:C8 zou zijn.

Tafels

We kunnen verwijzen naar tabellen (klik voor meer informatie over het maken en manipuleren van tabellen in VBA) in onze code. Als tabelgegevens in Excel worden bijgewerkt of gewijzigd, verwijst de code die naar de tabel verwijst naar de bijgewerkte tabelgegevens. Dit is met name handig wanneer wordt verwezen naar draaitabellen die zijn verbonden met een externe gegevensbron.

Door deze tabel in onze code te gebruiken, kunnen we verwijzen naar de kolommen van de tabel met de koppen in elke kolom en acties op de kolom uitvoeren op basis van hun naam. Naarmate de rijen in de tabel toenemen of afnemen volgens de gegevens, wordt het tabelbereik dienovereenkomstig aangepast en werkt onze code nog steeds voor de hele kolom in de tabel.

Bijvoorbeeld:

123 Sub DeleteTableColumn()ActiveWorkbook.Worksheets("Blad1").ListObjects("Tabel1").ListColumns("Leverancier").VerwijderenEinde sub
wave wave wave wave wave