Alueet ja solut VBA: ssa
Excel -laskentataulukot tallentavat tiedot soluihin. Solut on järjestetty riveiksi ja sarakkeiksi. Jokainen solu voidaan tunnistaa rivin ja sarakkeen leikkauspisteestä (esim. B3 tai R3C2).
Excel -alue viittaa yhteen tai useampaan soluun (esim. A3: B4)
Solun osoite
A1 Merkintä
A1 -merkinnässä soluun viitataan sen sarakkeen kirjaimella (A: sta XFD: hen) ja sen jälkeen rivinumerolla (1 - 1 048 576).
VBA: ssa voit viitata mihin tahansa soluun käyttämällä Alueobjekti.
123456789 | 'Katso aktiivisen taulukon solua B4MsgBox -alue ("B4")'' Katso solun B4 taulukossa nimeltä 'Data'MsgBox -laskentataulukot ("Data"). Alue ("B4")'Katso toisen OPEN -työkirjan Data -taulukon solua B4'nimeltään' My Data 'MsgBox -työkirjat ("Omat tiedot"). Laskentataulukot ("Data"). Alue ("B4") |
R1C1 -merkintä
R1C1 -merkinnässä soluun viitataan R, jota seuraa rivin numero, sitten kirjain "C" ja sarakkeen numero. esim. B4 R1C1 -merkinnöissä viitataan R4C2: lla. VBA: ssa käytät Solut -objekti käyttää R1C1 -merkintätapaa:
12 | 'Katso solu R [6] C [4] eli D6Solut (6, 4) = "D6" |
Solualue
A1 Merkintä
Jos haluat viitata useampaan kuin yhteen soluun, käytä ":" -merkkiä alkavan solun osoitteen ja viimeisen soluosoitteen välillä. Seuraavassa viitataan kaikkiin soluihin A1 - D10:
1 | Alue ("A1: D10") |
R1C1 -merkintä
Jos haluat viitata useampaan kuin yhteen soluun, käytä ”,” solun aloitusosoitteen ja viimeisen solun osoitteen välissä. Seuraavassa viitataan kaikkiin soluihin A1 - D10:
1 | Alue (Solut (1, 1), Solut (10, 4)) |
Kirjoittaminen soluille
Jos haluat kirjoittaa arvoja solulle tai viereiselle soluryhmälle, katso vain alue, kirjoita = -merkki ja kirjoita sitten tallennettava arvo:
12345678910 | 'Tallenna F5 soluun osoitteella F6Alue ("F6") = "F6"'Tallenna E6 soluun osoitteella R [6] C [5] eli E6Solut (6, 5) = "E6"'Säilytä A1: D10 alueella A1: D10Alue ("A1: D10") = "A1: D10"'taiAlue (solut (1, 1), solut (10, 4)) = "A1: D10" |
Lukeminen soluista
Jos haluat lukea arvoja soluista, katso muuttuja tallentaaksesi arvot, kirjoita = -merkki ja viittaa sitten luettavaan alueeseen:
1234567891011 | Himmennys 1Dim val2"Lue solusta F6val1 = Alue ("F6")"Lue solusta E6val2 = Solut (6, 5)MsgBox val1Msgbox val2 |
Huomautus: Jos haluat tallentaa arvoja solualueelta, sinun on käytettävä taulukkoa yksinkertaisen muuttujan sijasta.
Ei -vierekkäiset solut
Jos haluat viitata muihin vierekkäisiin soluihin, käytä pilkkua soluosoitteiden välillä:
123456 | 'Säilytä 10 soluissa A1, A3 ja A5Alue ("A1, A3, A5") = 10'Säilytä 10 soluissa A1: A3 ja D1: D3)Alue ("A1: A3, D1: D3") = 10 |
Solujen leikkaus
Jos haluat viitata muihin vierekkäisiin soluihin, käytä soluosoitteiden välissä välilyöntiä:
123 | 'Säilytä' Col D 'kohdassa D1: D10'joka on yleinen A1: D10: n ja D1: F10: n välilläAlue ("A1: D10 D1: G10") = "Col D" |
Siirtymä solusta tai alueesta
Siirtymätoiminnon avulla voit siirtää viitettä tietystä alueesta (solu tai soluryhmä) määritetyllä rivinumerolla_ ja sarakkeilla.
Siirtymän syntaksi
Välialue.Siirto (rivien_numero, sarakkeiden_luku)
Siirtymä solusta
12345678910111213141516 | 'SIIRTO solusta A1'Katso itse solua'Siirrä 0 riviä ja 0 sarakettaAlue ("A1"). Siirtymä (0, 0) = "A1"'Siirrä 1 riviä ja 0 sarakettaAlue ("A1"). Siirtymä (1, 0) = "A2"'Siirrä 0 riviä ja 1 sarakettaAlue ("A1"). Siirtymä (0, 1) = "B1"'Siirrä 1 riviä ja 1 sarakettaAlue ("A1"). Siirtymä (1, 1) = "B2"'Siirrä 10 riviä ja 5 sarakettaAlue ("A1"). Siirtymä (10, 5) = "F11" |
Siirtymä alueelta
123 | 'Siirrä viittaus alueeseen A1: D4 4 rivillä ja 4 sarakkeella'Uusi viite on E5: H8Alue ("A1: D4"). Siirtymä (4,4) = "E5: H8" |
Viittauksen asettaminen alueelle
Alueen määrittäminen aluemuuttujalle: ilmoita Range -tyyppinen muuttuja ja aseta se sitten Set -komennolla alueeksi. Huomaa, että sinun on käytettävä SET -komentoa, koska RANGE on objekti:
12345678 | 'Ilmoita alue muuttujaDim myRange kuin alue'Aseta muuttuja alueelle A1: D4Aseta myRange = Range ("A1: D4")'Tulostaa $ A $ 1: $ D $ 4MsgBox myRange.Address |
Muuta alueen kokoa
Range -objektin koon muuttamismenetelmä muuttaa viitealueen mittaa:
1234567 | Dim myRange as Range'Alue koon muuttamiseenAseta myRange = Range ("A1: F4")'Tulostaa $ A $ 1: $ E $ 10Virheenkorjaus Tulosta myRange.Resize (10, 5) Osoite |
Resized-alueen vasen yläsolu on sama kuin alkuperäisen alueen vasen yläsolu
Muuta syntaksin kokoa
Alue.Koko (rivien_numero, sarakkeiden_määrä)
OFFSET vs koon muuttaminen
Siirtymä ei muuta alueen mittoja, mutta siirtää sitä määritetyllä määrällä rivejä ja sarakkeita. Muuta kokoa ei muuta alkuperäisen alueen sijaintia, mutta muuttaa mitat määritetyksi rivien ja sarakkeiden lukumääräksi.
Kaikki solut taulukossa
Solut -objekti viittaa kaikkiin taulukon soluihin (1048576 riviä ja 16384 saraketta).
12 | 'Tyhjennä kaikki laskentataulukoiden solutSolut Kirkas |
Käytetty alue
UsedRange-ominaisuus antaa sinulle suorakulmaisen alueen vasemman yläkulman käytetystä solusta aktiivisen taulukon oikean alareunan käytettyyn soluun.
1234567 | Dim ws laskentataulukkonaAseta ws = ActiveSheet'$ B $ 2: $ L $ 14, jos L2 on ensimmäinen solu, jolla on jokin arvo'ja L14 on viimeinen solu, jolla on arvo'aktiivinen arkkiDebug.Print ws.UsedRange.Address |
Nykyinen alue
CurrentRegion-ominaisuus antaa sinulle vierekkäisen suorakulmaisen alueen vasemmasta yläkulmasta soluun/oikeaan alhaalta käytettyyn soluun, joka sisältää viitatun solun/alueen.
1234567891011 | Dim myRange as RangeAseta myRange = Range ("D4: F6")'Tulostaa $ B $ 2: $ L $ 14'Jos D4: F16 - B2 ja L14 on täytetty polkuDebug.Tulosta myRange.CurrentRegion.Address'Voit myös viitata yhteen aloitussoluunAseta myRange = Range ("D4") 'Tulostaa $ B $ 2: $ L $ 14 |
Alueen ominaisuudet
Voit saada osoitteen, solun rivi-/sarakenumeron ja rivien/sarakkeiden määrän seuraavalla alueella:
123456789101112131415161718192021 | Dim myRange as RangeAseta myRange = Range ("A1: F10")'Tulostaa $ A $ 1: $ F $ 10Virheenkorjaus Tulosta myRange.AddressAseta myRange = Range ("F10")'Tulostaa 10 riville 10Virheenkorjaus Tulosta myRange.Row'Tuloste 6 sarakkeelle FVirheenkorjaus Tulosta myRange.ColumnAseta myRange = Range ("E1: F5")'Tulostaa 5 alueen rivien lukumäärälleVirheenkorjaus Tulosta myRange.Rows.Count'Tulostaa 2 alueen sarakkeiden lukumäärälleVirheenkorjaus Tulosta myRange.Columns.Count |
Arkin viimeinen solu
Voit käyttää Rivit ja Sarakkeet kiinteistöt kanssa Solut objekti saadaksesi taulukon viimeisen solun:
1234567891011 | 'Tulosta viimeisen rivin numeroTulostaa 1048576Debug.Print "Arkin rivit:" & Rows.Count'Tulosta viimeisen sarakkeen numero"Tuloste 16384Debug.Print "Taulukon sarakkeet:" & Columns.Count'Tulosta viimeisen solun osoite'Tulostaa $ XFD $ 1048576Debug.Print "Arkin viimeisen solun osoite:" & Solut (Rows.Count, Columns.Count) |
Viimeksi käytetty rivinumero sarakkeessa
END -ominaisuus vie alueen viimeisen solun, ja End (xlUp) vie sinut ensimmäiseen käytettyyn soluun kyseisestä solusta.
123 | Himmennä viimeinen rivi niin kauanlastRow = Solut (Rivid.Count, "A"). End (xlUp) .Row |
Viimeksi käytetty sarakkeen numero rivillä
123 | Himmennä lastCol Niin kauanlastCol = Solut (1, Columns.Count) .End (xlToLeft) .Column |
END -ominaisuus vie alueen viimeisen solun ja End (xlToLeft) vie sinut vasemmalle kyseisen solun ensimmäiseen käytettyyn soluun.
Voit myös käyttää xlDown- ja xlToRight -ominaisuuksia navigoidaksesi nykyisen solun ensimmäiseen ala- tai oikeaan soluun.
Solun ominaisuudet
Yhteiset ominaisuudet
Tässä on koodi yleisesti käytettyjen solun ominaisuuksien näyttämiseksi
12345678910111213141516171819202122 | Himmennä solu alueenaAseta solu = alue ("A1")aktivoiVirheenkorjaus Tulosta solu Osoite'Tulosta $ 1 $Virheenkorjaus. Tulosta solu. Arvo"Tulostaa 456'OsoiteVirheenkorjaus Tulosta solu Kaava'Tulosteet = SUMMA (C2: C3)'KommentoiDebug.Print cell.Comment.Text'TyyliVirheenkorjaus Tulosta solu Tyyli'SolumuotoDebug.Tulosta solu.DisplayFormat.NumberFormat |
Solun fontti
Cell.Font -objekti sisältää Solun fontin ominaisuuksia:
1234567891011121314151617181920 | Himmennä solu alueenaAseta solu = alue ("A1")'Tavallinen, kursivoitu, lihavoitu ja lihavoitu kursivoitucell.Font.FontStyle = "Lihavoitu kursiivi"' Sama kuincell.Font.Bold = Tottacell.Font.Italic = Totta'Aseta fontiksi Couriercell.Font.FontStyle = "Kuriiri"'Aseta kirjasimen väricell.Font.Color = vbBlue'taicell.Font.Color = RGB (255, 0, 0)'Aseta kirjasinkokocell.Font.Size = 20 |
Kopioi ja liitä
Liitä kaikki
Alueita/soluja voidaan kopioida ja liittää paikasta toiseen. Seuraava koodi kopioi kaikki lähdealueen ominaisuudet kohdealueelle (vastaa CTRL-C ja CTRL-V)
1234567 | 'Yksinkertainen kopioAlue ("A1: D20"). KopioiLaskentataulukot ("Sheet2"). Alue ("B10"). Liitä'taiKopioi nykyisestä taulukosta taulukkoon nimeltä Sheet2Alue ("A1: D20"). Kopiointikohde: = laskentataulukot ("Taulukko2"). Alue ("B10") |
Liitä erityinen
Lähdealueen valitut ominaisuudet voidaan kopioida kohteeseen käyttämällä PASTESPECIAL -vaihtoehtoa:
123 | Liitä alue vain arvoiksiAlue ("A1: D20"). KopioiLaskentataulukot ("Sheet2"). Alue ("B10"). PasteSpecial Paste: = xlPasteValues |
Tässä on mahdolliset liitäntävaihtoehdot:
12345678910111213 | 'Liitä erikoistyypitxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats |
AutoFit -sisältö
Rivien ja sarakkeiden kokoa voidaan muuttaa sopimaan sisältöön alla olevan koodin avulla:
12345 | 'Muuta rivien 1-5 kokoa sisällön mukaanRivit ("1: 5"). AutoFitMuuta sarakkeiden A ja B kokoa sisällön mukaiseksiSarakkeet ("A: B"). Automaattinen sovitus |
Lisää alueesimerkkejä
On suositeltavaa käyttää Makrotallenninta, kun suoritat vaaditut toimenpiteet graafisen käyttöliittymän kautta. Se auttaa sinua ymmärtämään erilaisia vaihtoehtoja ja niiden käyttöä.
Jokaiselle
On helpompaa kiertää alue käyttämällä Jokaiselle rakentaa alla olevan kuvan mukaisesti:
123 | Jokaiselle alueen solulle ("A1: B100")'Tee jotain solun kanssaSeuraava solu |
Jokaisella silmukan iteroinnilla yksi alueen solu osoitetaan muuttujalle c ja For -silmukan käskyt suoritetaan kyseiselle solulle. Silmukka poistuu, kun kaikki solut käsitellään.
Järjestellä
Lajittelu on Range -objektin menetelmä. Voit lajitella alueen määrittämällä lajitteluvaihtoehdot alueeseen. Alla oleva koodi lajittelee sarakkeet A: C solun C2 avaimen perusteella. Lajittelujärjestys voi olla xlAscendating tai xlDescending. Otsikko: = xlKyllä tulee käyttää, jos ensimmäinen rivi on otsikkorivi.
12 | Sarakkeet ("A: C"). Lajittelunäppäin1: = Alue ("C2"), _järjestys1: = xl Kasvava, otsikko: = xlKyllä |
löytö
Find on myös Range Object -menetelmä. Se löytää ensimmäisen solun, jonka sisältö vastaa hakuehtoja, ja palauttaa solun alueobjektina. Se palaa Ei mitään jos ottelua ei ole.
Käyttää FindNext menetelmä (tai FindPrevious) löytääksesi seuraavan (edellisen) tapahtuman.
Seuraava koodi muuttaa kirjasimen arvoksi "Arial Black" kaikille alueen soluille, jotka alkavat "John":
12345 | Jokaista c alueella ("A1: A100")Jos c Kuten "John*" niinc.Font.Name = "Arial Black"Loppu JosSeuraava c |
Seuraava koodi korvaa kaikki esiintymät kohdasta "testattava" tilaan "hyväksytty" määritetyllä alueella:
12345678910 | Alueella ("a1: a500")Aseta c = .Find ("Testaa", LookIn: = xlValues)Jos ei c ei ole sitten mitäänfirstaddress = c.OdressTehdäc.Value = "Hyväksytty"Aseta c = .FindNext (c)Silmukka kun ei c ei ole mitään ja c.osoite ensimmäinen osoiteLoppu JosLopeta |
On tärkeää huomata, että sinun on määritettävä alue FindNextin käyttämiseksi. Sinun on myös annettava pysäytystila, muuten silmukka suoritetaan ikuisesti. Normaalisti ensimmäisen löydetyn solun osoite tallennetaan muuttujaan ja silmukka pysäytetään, kun saavutat solun uudelleen. Sinun on myös tarkistettava tapaus, kun mitään ei löydy silmukan pysäyttämiseksi.
Alueen osoite
Käytä Range.Address -osoitetta saadaksesi A1 -tyylisen osoitteen
123 | MsgBox -alue ("A1: D10"). Osoite'taiDebug.Print Range ("A1: D10"). Osoite |
Käytä xlReferenceStyle (oletusarvo xlA1) saadaksesi osoitteita R1C1 -tyyliin
123 | MsgBox -alue ("A1: D10"). Osoite (ReferenceStyle: = xlR1C1)'taiDebug.Print Range ("A1: D10"). Osoite (ReferenceStyle: = xlR1C1) |
Tästä on hyötyä, kun käsittelet muuttujiin tallennettuja alueita ja haluat käsitellä vain tiettyjä osoitteita.
Alue Array
On nopeampaa ja helpompaa siirtää alue taulukkoon ja käsitellä sitten arvot. Sinun on ilmoitettava taulukko vaihtoehdoksi, jotta vältät taulukon alueen täyttämiseen tarvittavan koon laskemisen. Taulukon mitat on asetettu vastaamaan alueen arvojen määrää.
123456789 | Dim DirArray vaihtoehtoina'Tallenna alueen arvot taulukkoonDirArray = Alue ("a1: a5"). Arvo'Suorita arvojen käsittelyJokaiselle c In DirArrayVirheenkorjaus Tulosta cSeuraava |
Array Rangeen
Käsittelyn jälkeen voit kirjoittaa taulukon takaisin alueelle. Jos haluat kirjoittaa taulukon yllä olevassa esimerkissä alueelle, sinun on määritettävä alue, jonka koko vastaa taulukon elementtien määrää.
Kirjoita taulukko alueelle D1: D5 alla olevan koodin avulla:
123 | Alue ("D1: D5"). Arvo = DirArrayAlue ("D1: H1"). Arvo = Application.Transpose (DirArray) |
Huomaa, että sinun on transponoitava taulukko, jos kirjoitat sen riville.
Summa -alue
12 | SumOfRange = Application.WorksheetFunction.Sum (Alue ("A1: A10"))Debug. Tulosta SumOfRange |
Voit käyttää monia Excelin toimintoja VBA -koodissasi määrittämällä Application.WorkSheetFunction. ennen toiminnon nimeä kuten yllä olevassa esimerkissä.
Laske alue
1234567 | 'Laske solujen lukumäärä alueellaCountOfCells = Application.WorksheetFunction.Count (Alue ("A1: A10"))Debug. Tulosta CountOfCells'Laske ei -tyhjien solujen määrä alueellaCountOfNonBlankCells = Application.WorksheetFunction.CountA (Alue ("A1: A10"))Debug.Print CountOfNonBlankCells |
Käsikirjoitus: Vinamra Chandra