VBA Dynamic Range

Den här artikeln kommer att visa hur du skapar ett dynamiskt intervall i Excel VBA.

Att deklarera ett specifikt cellintervall som en variabel i Excel VBA begränsar oss till att endast arbeta med de specifika cellerna. Genom att deklarera dynamiska intervall i Excel får vi mycket mer flexibilitet över vår kod och den funktionalitet som den kan utföra.

Refererar till intervall och celler

När vi refererar till Range- eller Cell -objektet i Excel hänvisar vi normalt till dem genom hårdkodning i den rad och kolumner som vi behöver.

Range Fastighet

Med hjälp av intervallegenskapen, i exemplets kodrader nedan, kan vi utföra åtgärder på detta område, till exempel att ändra färg på cellerna eller göra cellerna djärva.

12 Område ("A1: A5"). Font.Color = vbRedOmråde ("A1: A5"). Font.Bold = True

Cells egendom

På samma sätt kan vi använda egenskapen Celler för att referera till ett cellintervall genom att direkt referera till raden och kolumnen i cellegenskapen. Raden måste alltid vara en siffra men kolumnen kan vara ett tal eller en bokstav med citattecken.

Till exempel kan celladressen A1 refereras till som:

1 Celler (1,1)

Eller

1 Celler (1, "A")

För att använda Cells -egenskapen för att referera till ett cellintervall måste vi ange början av intervallet och slutet av intervallet.

Till exempel för referensintervall A1: A6 kan vi använda denna syntax nedan:

1 Område (celler (1,1), celler (1,6)

Vi kan sedan använda egenskapen Cells för att utföra åtgärder på intervallet enligt exemplets kodrader nedan:

12 Område (celler (2, 2), celler (6, 2)). Font.Color = vbRedRange (Cells (2, 2), Cells (6, 2)). Font.Bold = True

Dynamiska intervall med variabler

Eftersom storleken på våra data ändras i Excel (det vill säga att vi använder fler rader och kolumner än de områden som vi har kodat), skulle det vara användbart om de områden som vi hänvisar till i vår kod också skulle förändras. Med hjälp av intervallobjektet ovan kan vi skapa variabler för att lagra det maximala rad- och kolumnnumret för området i Excel -kalkylbladet som vi använder och använda dessa variabler för att dynamiskt justera intervallobjektet medan koden körs.

Till exempel

1234 Dim lRad som heltalDim lCol som heltallRow = Range ("A1048576"). Slut (xlUp) .RowlCol = Range ("XFD1"). Slut (xlToLeft) .Column

Sista raden i kolumnen

Eftersom det finns 1048576 rader i ett kalkylblad, kommer variabeln lRow att gå längst ner på arket och sedan använda den speciella kombinationen av Avsluta -tangenten plus uppåtpilen för att gå till den sista raden som användes i kalkylbladet - detta ger oss numret på raden som vi behöver i vårt sortiment.

Sista kolumnen i rad

På samma sätt kommer lCol att flytta till kolumn XFD som är den sista kolumnen i ett kalkylblad och sedan använda den speciella tangentkombinationen Avsluta plus vänsterpil för att gå till den sista kolumnen som används i kalkylbladet - detta ger oss nummer för den kolumn som vi behöver i vårt sortiment.

För att få hela intervallet som används i kalkylbladet kan vi därför köra följande kod:

1234567891011 Sub GetRange ()Dim lRad som heltalDim lCol som heltalDim rng As RangelRow = Range ("A1048576"). Slut (xlUp) .Row'använd lRow för att hitta den sista kolumnen i intervalletlCol = Range ("XFD" & lRow) .End (xlToLeft) .ColumnStäll in rng = Range (Cells (1, 1), Cells (lRow, lCol))'msgbox för att visa oss intervalletMsgBox "Range is" & rng.AddressAvsluta Sub

Specialceller - LastCell

Vi kan också använda SpecialCells -metoden för intervallobjektet för att få den sista raden och kolumnen som används i ett kalkylblad.

123456789101112 Sub UseSpecialCells ()Dim lRad som heltalDim lCol som heltalDim rng As RangeDim rngBegin As RangeAnge rngBegin = Range ("A1")lRow = rngBegin.SpecialCells (xlCellTypeLastCell) .RowlCol = rngBegin.SpecialCells (xlCellTypeLastCell) .ColumnStäll in rng = Range (Cells (1, 1), Cells (lRow, lCol))'msgbox för att visa oss intervalletMsgBox "Range is" & rng.AddressAvsluta Sub

UsedRange

Den använda intervallmetoden innehåller alla celler som har värden i det aktuella kalkylbladet.

123456 Sub UsedRangeExample ()Dim rng As RangeAnge rng = ActiveSheet.UsedRange'msgbox för att visa oss intervalletMsgBox "Range is" & rng.AddressAvsluta Sub

CurrentRegion

Den aktuella regionen skiljer sig från UsedRange genom att den tittar på cellerna som omger en cell som vi har deklarerat som ett startintervall (dvs. variabeln rngBegin i exemplet nedan) och sedan tittar på alla celler som är "bifogade" eller associerade till den deklarerade cellen. Om en tom cell i en rad eller kolumn uppstår, slutar CurrentRegion att leta efter ytterligare celler.

12345678 Sub CurrentRegion ()Dim rng As RangeDim rngBegin As RangeAnge rngBegin = Range ("A1")Ange rng = rngBegin.CurrentRegion'msgbox för att visa oss intervalletMsgBox "Range is" & rng.AddressAvsluta Sub

Om vi ​​använder den här metoden måste vi se till att alla celler i det område du behöver är anslutna utan tomma rader eller kolumner.

Benämnd Range

Vi kan också referera till namngivna områden i vår kod. Namngivna områden kan vara dynamiska så långt som när data uppdateras eller infogas, kan områdesnamnet ändras så att den innehåller nya data.

I det här exemplet ändras teckensnittet till fetstil för intervallnamnet "Januari"

12345 Sub RangeNameExample ()Dim rng som RangeStäll in rng = Range ("januari")rng.Font.Bold = = SantAvsluta Sub

Som du kommer att se på bilden nedan, om en rad läggs till i intervallnamnet, uppdateras intervallnamnet automatiskt för att inkludera den raden.

Skulle vi sedan köra exempelkoden igen skulle intervallet som påverkas av koden vara C5: C9 medan det i första hand skulle ha varit C5: C8.

Tabeller

Vi kan referera till tabeller (klicka för mer information om hur du skapar och manipulerar tabeller i VBA) i vår kod. När en tabelldata i Excel uppdateras eller ändras, kommer koden som hänvisar till tabellen att hänvisa till den uppdaterade tabelldatan. Detta är särskilt användbart när det gäller pivottabeller som är anslutna till en extern datakälla.

Med denna tabell i vår kod kan vi hänvisa till tabellens kolumner med rubrikerna i varje kolumn och utföra åtgärder på kolumnen enligt deras namn. När raderna i tabellen ökar eller minskar enligt data, kommer tabellintervallet att anpassas därefter och vår kod fungerar fortfarande för hela kolumnen i tabellen.

Till exempel:

123 Sub DeleteTableColumn ()ActiveWorkbook.Worksheets ("Sheet1"). ListObjects ("Table1"). ListColumns ("Supplier"). RaderaAvsluta Sub
wave wave wave wave wave