VBA -dynaaminen alue

Tämä artikkeli osoittaa, kuinka luoda dynaaminen alue Excel VBA: ssa.

Tietyn solualueen ilmoittaminen muuttujaksi Excel VBA: ssa rajoittaa työskentelyn vain kyseisten solujen kanssa. Ilmoittamalla dynaamiset alueet Excelissä saamme paljon enemmän joustavuutta koodimme ja sen suorittamien toimintojen suhteen.

Viittausalueet ja solut

Kun viittaamme alue- tai soluobjektiin Excelissä, viittaamme niihin yleensä vaaditulla rivillä ja sarakkeissa kovakoodauksella.

Alueominaisuus

Käyttämällä Alue -ominaisuutta alla olevissa esimerkkiriveissä voimme suorittaa tällä alueella toimintoja, kuten muuttaa solujen väriä tai tehdä soluista lihavoituja.

12 Alue ("A1: A5"). Font.Color = vbRedAlue ("A1: A5"). Font.Bold = Tosi

Solujen omaisuus

Vastaavasti voimme käyttää Solut -ominaisuutta viittaamaan solualueeseen viittaamalla suoraan soluominaisuuden riviin ja sarakkeeseen. Rivin on aina oltava numero, mutta sarake voi olla numero tai lainausmerkeissä oleva kirjain.

Esimerkiksi solun osoitteeseen A1 voidaan viitata seuraavasti:

1 Solut (1,1)

Tai

1 Solut (1, "A")

Jotta voimme käyttää soluominaisuutta viittaamaan solualueeseen, meidän on ilmoitettava alueen alku ja alueen loppu.

Esimerkiksi viitealueelle A1: A6 voimme käyttää tätä syntaksia alla:

1 Alue (Solut (1,1), Solut (1,6)

Voimme sitten käyttää Solut -ominaisuutta suorittaaksesi toimintoja alueella alla olevien esimerkkirivien mukaisesti:

12 Alue (Solut (2, 2), Solut (6, 2)). Fontti Väri = vbPunainenAlue (Solut (2, 2), Solut (6, 2)). Fontti Lihavoitu = Tosi

Dynaaminen alue muuttujilla

Tietojemme koon muuttuessa Excelissä (eli käytämme enemmän rivejä ja sarakkeita kuin koodatut alueet), olisi hyödyllistä, jos myös koodissamme viittaavat alueet muuttuisivat. Käyttämällä yllä olevaa Range -objektia voimme luoda muuttujia tallentaaksemme käyttämämme Excel -laskentataulukon alueen enimmäisrivi- ja sarakenumerot ja säätää näiden muuttujien avulla Range -objektia dynaamisesti koodin ollessa käynnissä.

Esimerkiksi

1234 Dim lRow kokonaislukunaDim lCol kokonaislukunalRivi = Alue ("A1048576"). Loppu (xlUp) .RivilCol = Alue ("XFD1"). Loppu (xlToLeft). Sarake

Viimeinen rivi sarakkeessa

Koska laskentataulukossa on 1048576 riviä, muuttuja lRow siirtyy taulukon alareunaan ja käyttää lopetusnäppäimen ja ylänuolinäppäimen erikoisyhdistelmää siirtyäksesi laskentataulukon viimeiselle riville - tämä antaa meille sen rivin numero, jota tarvitsemme alueellamme.

Rivin viimeinen sarake

Vastaavasti lCol siirtyy sarakkeeseen XFD, joka on laskentataulukon viimeinen sarake, ja käyttää lopetusnäppäimen ja vasen nuolinäppäimen erityistä näppäinyhdistelmää siirtyäksesi laskentataulukon viimeiseen sarakkeeseen - tämä antaa meille sarakkeen numero, jota tarvitsemme valikoimastamme.

Siksi saadaksemme koko laskentataulukossa käytetyn alueen voimme suorittaa seuraavan koodin:

1234567891011 Sub GetRange ()Dim lRow kokonaislukunaDim lCol kokonaislukunaDim rng as RangelRivi = Alue ("A1048576"). Loppu (xlUp) .Rivi'Käytä lRowa löytääksesi alueen viimeisen sarakkeenlCol = Range ("XFD" & lRow) .End (xlToLeft) .ColumnAseta rng = alue (solut (1, 1), solut (lRow, lCol))'msgbox näyttää alueemmeMsgBox "Alue on" & rng.AddressEnd Sub

SpecialCells - LastCell

Voimme myös käyttää alueobjektin SpecialCells -menetelmää saadaksemme laskentataulukon viimeisen rivin ja sarakkeen.

123456789101112 AlikäyttöSpecialCells ()Dim lRow kokonaislukunaDim lCol kokonaislukunaDim rng as RangeDim rngBegin As RangeAseta rngBegin = Alue ("A1")lRow = rngBegin.SpecialCells (xlCellTypeLastCell) .RowlCol = rngBegin.SpecialCells (xlCellTypeLastCell) .ColumnAseta rng = alue (solut (1, 1), solut (lRow, lCol))'msgbox näyttää alueemmeMsgBox "Alue on" & rng.AddressEnd Sub

Käytetty alue

Käytetty alue -menetelmä sisältää kaikki solut, joissa on arvoja nykyisessä laskentataulukossa.

123456 AlakäyttöalueEsimerkki ()Dim rng as RangeAseta rng = ActiveSheet.UsedRange'msgbox näyttää alueemmeMsgBox "Alue on" & rng.AddressEnd Sub

Nykyinen alue

Nykyinen alue eroaa UsedRange -alueesta siinä, että se tarkastelee soluja, jotka ympäröivät aloitusalueemme (eli muuttuja rngBegin alla olevassa esimerkissä), ja tarkastelee sitten kaikkia soluja, jotka ovat '' kiinnittyneet '' tai liittyvät ilmoitettuun soluun. Jos rivillä tai sarakkeessa on tyhjä solu, Nykyinen alue lopettaa uusien solujen etsimisen.

12345678 Alivirta -alue ()Dim rng as RangeDim rngBegin As RangeAseta rngBegin = Alue ("A1")Aseta rng = rngBegin.CurrentRegion'msgbox näyttää alueemmeMsgBox "Alue on" & rng.AddressEnd Sub

Jos käytämme tätä menetelmää, meidän on varmistettava, että kaikki tarvitsemasi alueen solut on yhdistetty ilman tyhjiä rivejä tai sarakkeita.

Nimetty alue

Voimme myös viitata nimettyihin alueisiin koodissamme. Nimetyt alueet voivat olla dynaamisia siltä osin kuin tietoja päivitetään tai lisätään, alueen nimi voi muuttua sisältämään uudet tiedot.

Tämä esimerkki muuttaa alueen nimen "Tammikuu" kirjasimen lihavoituksi

12345 AlaalueNimiEsimerkki ()Dim rng kuin alueAseta rng = Alue ("Tammikuu")rng.Font.Bold = = TottaEnd Sub

Kuten alla olevasta kuvasta näet, jos alueen nimeen lisätään rivi, alueen nimi päivittyy automaattisesti sisältämään kyseisen rivin.

Jos sitten suoritamme esimerkkikoodin uudelleen, koodin vaikutusalue olisi C5: C9, kun taas ensimmäisessä tapauksessa se olisi ollut C5: C8.

Taulukot

Voimme viitata taulukoihimme (napsauta saadaksesi lisätietoja taulukoiden luomisesta ja käsittelystä VBA: ssa) koodissamme. Kun taulukon tiedot Excelissä päivitetään tai muutetaan, taulukkoon viittaava koodi viittaa sitten päivitettyihin taulukkotietoihin. Tämä on erityisen hyödyllistä, kun viitataan pivot -taulukoihin, jotka on liitetty ulkoiseen tietolähteeseen.

Käyttämällä tätä taulukkoa koodissamme voimme viitata taulukon sarakkeisiin kunkin sarakkeen otsikoiden perusteella ja suorittaa toimintoja sarakkeelle niiden nimen mukaan. Kun taulukon rivit kasvavat tai pienenevät tietojen mukaan, taulukkoalue muuttuu vastaavasti ja koodimme toimii edelleen koko taulukon sarakkeen osalta.

Esimerkiksi:

123 Sub DeleteTableColumn ()ActiveWorkbook.Worksheets ("Sheet1"). ListObjects ("Table1"). ListColumns ("toimittaja"). PoistaEnd Sub
wave wave wave wave wave