Excel VBA -områder og -celler

Ranges and Cells i VBA

Excel -regneark lagrer data i celler. Celler er ordnet i rader og kolonner. Hver celle kan identifiseres ved skjæringspunktet i raden og kolonnen (eks. B3 eller R3C2).

Et Excel -område refererer til en eller flere celler (eks. A3: B4)

Celleadresse

A1 Notasjon

I A1 -notasjon refereres det til en celle med kolonnebokstaven (fra A til XFD) etterfulgt av radnummeret (fra 1 til 1 048 576).

I VBA kan du referere til hvilken som helst celle ved hjelp av Rekkevidde.

123456789 'Se celle B4 på det aktive arketMsgBox Range ("B4")'Se celle B4 på arket som heter' Data 'MsgBox -regneark ("Data"). Område ("B4")'Se celle B4 på arket som heter' Data 'i en annen OPEN arbeidsbok'kalt' Mine data 'MsgBox Workbooks ("Mine data"). Regneark ("Data"). Område ("B4")

R1C1 -notasjon

I R1C1 -notasjon refereres en celle med R etterfulgt av radnummer, deretter bokstaven 'C' etterfulgt av kolonnenummeret. f.eks. B4 i R1C1 -notasjon vil bli referert av R4C2. I VBA bruker du Celler Objekt å bruke R1C1 -notasjon:

12 'Se celle R [6] C [4] dvs. D6Celler (6, 4) = "D6"

Utvalg av celler

A1 Notasjon

For å referere til mer enn én celle, bruk et “:” mellom startcelleadressen og siste celleadresse. Følgende vil referere til alle cellene fra A1 til D10:

1 Område ("A1: D10")

R1C1 -notasjon

For å referere til mer enn én celle, bruk en “,” mellom startcelleadressen og siste celleadresse. Følgende vil referere til alle cellene fra A1 til D10:

1 Område (celler (1, 1), celler (10, 4))

Skriver til celler

For å skrive verdier til en celle eller sammenhengende gruppe celler, referer du enkelt til området, setter et = -tegn og skriver deretter verdien som skal lagres:

12345678910 'Lagre F5 i celle med adresse F6Område ("F6") = "F6"'Lagre E6 i celle med adresse R [6] C [5] dvs. E6Celler (6, 5) = "E6"'Lagre A1: D10 i området A1: D10Område ("A1: D10") = "A1: D10"'ellerOmråde (celler (1, 1), celler (10, 4)) = "A1: D10"

Lese fra celler

For å lese verdier fra celler, referer du enkelt til variabelen for å lagre verdiene, setter et = -tegn og refererer deretter til området som skal leses:

1234567891011 Dim val1Dim val2'Les fra celle F6val1 = Område ("F6")'Les fra celle E6val2 = Celler (6, 5)MsgBox val1Msgbox val2

Merk: For å lagre verdier fra en rekke celler, må du bruke en matrise i stedet for en enkel variabel.

Ikke sammenhengende celler

For å referere til ikke -sammenhengende celler, bruk et komma mellom celleadressene:

123456 'Lagre 10 i cellene A1, A3 og A5Område ("A1, A3, A5") = 10'Lagre 10 i cellene A1: A3 og D1: D3)Område ("A1: A3, D1: D3") = 10

Skjæringspunkt mellom celler

For å referere til ikke -sammenhengende celler, bruk et mellomrom mellom celleadressene:

123 'Lagre' Col D 'i D1: D10'som er vanlig mellom A1: D10 og D1: F10Område ("A1: D10 D1: G10") = "Col D"

Offset fra en celle eller et område

Ved å bruke forskyvningsfunksjonen kan du flytte referansen fra et gitt område (celle eller gruppe av celler) med det angitte antallet_ruter og antall_kolonner.

Offset syntaks

Range.Offset (number_of_rows, number_of_columns)

Offset fra en celle

12345678910111213141516 'OFFSET fra en celle A1'Se til selve cellen'Flytt 0 rader og 0 kolonnerOmråde ("A1"). Forskyvning (0, 0) = "A1"'Flytt 1 rad og 0 kolonnerOmråde ("A1"). Forskyvning (1, 0) = "A2"'Flytt 0 rader og 1 kolonnerOmråde ("A1"). Forskyvning (0, 1) = "B1"'Flytt 1 rad og 1 kolonneOmråde ("A1"). Forskyvning (1, 1) = "B2"'Flytt 10 rader og 5 kolonnerOmråde ("A1"). Forskyvning (10, 5) = "F11"

Offset fra et område

123 'Flytt referanse til område A1: D4 med 4 rader og 4 kolonner'Ny referanse er E5: H8Område ("A1: D4"). Forskyvning (4,4) = "E5: H8"

Angi referanse til et område

For å tilordne et område til en områdevariabel: erklær en variabel av typen Range, og bruk deretter Set -kommandoen for å angi det til et område. Vær oppmerksom på at du må bruke SET -kommandoen ettersom RANGE er et objekt:

12345678 'Angi en variabel for områdeDim myRange som Range'Sett variabelen til området A1: D4Angi myRange = Range ("A1: D4")'Skriver ut $ A $ 1: $ D $ 4MsgBox myRange.Adress

Endre størrelse på et område

Endre størrelse på metode for områdeobjekt endrer dimensjonen til referanseområdet:

1234567 Dim myRange As Range'Rekkevidde for å endre størrelseAngi myRange = Range ("A1: F4")'Skriver ut $ A $ 1: $ E $ 10Debug.Print myRange.Resize (10, 5) .Adress

Cellen øverst til venstre i området Endret størrelse er den samme som cellen øverst til venstre i det opprinnelige området

Endre størrelse på syntaks

Område. Endre størrelse (antall_rader, antall_kolonner)

OFFSET vs Resize

Offset endrer ikke dimensjonene til området, men flytter det med det angitte antallet rader og kolonner. Endre størrelse endrer ikke plasseringen til det opprinnelige området, men endrer dimensjonene til det angitte antallet rader og kolonner.

Alle celler i arket

Celle -objektet refererer til alle cellene i arket (1048576 rader og 16384 kolonner).

12 'Fjern alle celler i regnearkCells.Clear

UsedRange

UsedRange-egenskapen gir deg det rektangulære området fra cellen øverst til venstre i cellen til den brukte cellen til høyre og nederst i det aktive arket.

1234567 Dim ws Som regnearkSett ws = ActiveSheet'$ B $ 2: $ L $ 14 hvis L2 er den første cellen med en verdi'og L14 er den siste cellen med en hvilken som helst verdi på' aktivt arkDebug.Print ws.UsedRange.Address

CurrentRegion

CurrentRegion-egenskapen gir deg det sammenhengende rektangulære området fra cellen øverst til venstre til den brukte cellen som er referert til cellen/området.

1234567891011 Dim myRange As RangeSett myRange = Range ("D4: F6")'Skriver ut $ B $ 2: $ L $ 14'Hvis det er en fylt bane fra D4: F16 til B2 OG L14Debug.Print myRange.CurrentRegion.Address'Du kan også referere til en enkelt startcelleSett myRange = Range ("D4") 'Skriver ut $ B $ 2: $ L $ 14

Områdeegenskaper

Du kan få adresse, rad/kolonnummer i en celle og antall rader/kolonner i et område som angitt nedenfor:

123456789101112131415161718192021 Dim myRange As RangeSett myRange = Range ("A1: F10")'Skriver ut $ A $ 1: $ F $ 10Debug.Print myRange.AddressSett myRange = Range ("F10")'Skriver ut 10 for rad 10Debug.Print myRange.Row'Skriver ut 6 for kolonne FDebug.Print myRange.ColumnAngi myRange = Range ("E1: F5")'Skriver ut 5 for antall rader i områdetDebug.Print myRange.Rows.Count'Skriver ut 2 for antall kolonner i områdetDebug.Print myRange.Columns.Count

Siste celle i ark

Du kan bruke Antall rader og Kolonner. Telle eiendommer med Celler objekt for å få den siste cellen på arket:

1234567891011 'Skriv ut det siste radnummeret'Skriver ut 1048576Debug.Print "Rader i arket:" & Rows.Count'Skriv ut det siste kolonnenummeret'Skriver ut 16384Debug.Print "Kolonner i arket:" & Columns.Count'Skriv ut adressen til den siste cellen'Skriver ut $ XFD $ 1048576Debug.Print "Adressen til siste celle i arket:" og celler (Rows.Count, Columns.Count)

Sist brukte radnummer i en kolonne

END -egenskapen tar deg den siste cellen i området, og End (xlUp) tar deg opp til den første brukte cellen fra den cellen.

123 Dim lastRow As LonglastRow = Celler (Rows.Count, "A"). Slutt (xlUp) .Row

Sist brukte kolonnummer på rad

123 Dim lastCol As LonglastCol = Cells (1, Columns.Count) .End (xlToLeft) .Column

END -egenskapen tar deg den siste cellen i området, og End (xlToLeft) tar deg til venstre til den første brukte cellen fra den cellen.

Du kan også bruke egenskapene xlDown og xlToRight til å navigere til de første nederste eller høyre brukte cellene i den gjeldende cellen.

Celleegenskaper

Felles eiendommer

Her er kode for å vise vanlige celleegenskaper

12345678910111213141516171819202122 Dim cell As RangeAngi celle = område ("A1")celle. AktiverDebug.Print cell.Adress'Skriv ut $ A $ 1Debug.Print cell.Value'Skriver ut 456'AdresseDebug.Print cell.Formula'Utskrifter = SUM (C2: C3)' KommentarDebug.Print cell.Comment.Text' StilDebug.Print cell.Style'CelleformatDebug.Print cell.DisplayFormat.NumberFormat

Cell Font

Cell.Font -objektet inneholder egenskapene til celleskriften:

1234567891011121314151617181920 Dim cell As RangeAngi celle = område ("A1")'Vanlig, kursiv, fet og fet kursivcell.Font.FontStyle = "Fet kursiv"' Samme somcell.Font.Bold = Truecell.Font.Italic = True'Sett skrift til Couriercell.Font.FontStyle = "Courier"'Angi skriftfargecell.Font.Color = vbBlue'ellercell.Font.Color = RGB (255, 0, 0)'Angi skriftstørrelsecell.Font.Size = 20

Kopiere og lime inn

Lim inn alle

Områder/celler kan kopieres og limes inn fra et sted til et annet. Følgende kode kopierer alle egenskapene til kildeområdet til destinasjonsområdet (tilsvarer CTRL-C og CTRL-V)

1234567 'Enkel kopiOmråde ("A1: D20"). KopierRegneark ("Ark2"). Område ("B10"). Lim inn'eller'Kopi fra gjeldende ark til ark med navnet' Sheet2 'Område ("A1: D20"). Kopimål: = Regneark ("Ark2"). Område ("B10")

Lim inn spesial

Utvalgte egenskaper for kildeområdet kan kopieres til destinasjonen ved å bruke PASTESPECIAL -alternativet:

123 Lim inn området bare som verdierOmråde ("A1: D20"). KopierRegneark ("Sheet2"). Område ("B10"). PasteSpecial Paste: = xlPasteValues

Her er de mulige alternativene for alternativet Lim inn:

12345678910111213 'Lim inn spesielle typerxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

AutoFit -innhold

Størrelsen på rader og kolonner kan endres for å passe innholdet ved hjelp av koden nedenfor:

12345 'Endre størrelsen på rad 1 til 5 for å passe innholdetRader ("1: 5"). AutoFit'Endre størrelsen på kolonnene A til B for å passe innholdetKolonner ("A: B"). AutoFit

Flere rekkeviddeeksempler

Det anbefales at du bruker makroopptaker mens du utfører den nødvendige handlingen gjennom GUI. Det vil hjelpe deg å forstå de forskjellige alternativene som er tilgjengelige og hvordan du bruker dem.

For hver

Det er lettere å gå gjennom et område med For hver konstruer som vist nedenfor:

123 For hver celle i området ("A1: B100")'Gjør noe med cellenNeste celle

Ved hver iterasjon av løkken blir en celle i området tilordnet variabelen c, og setninger i For -løkken utføres for den cellen. Sløyfe går ut når alle cellene er behandlet.

Sortere

Sort er en metode for Range -objekt. Du kan sortere et område ved å angi alternativer for sortering til Range.Sort. Koden nedenfor vil sortere kolonnene A: C basert på nøkkelen i celle C2. Sorteringsrekkefølge kan være xlAscending eller xlDescending. Overskrift: = xlJa skal brukes hvis første rad er overskriftsrad.

12 Kolonner ("A: C"). Sorter nøkkel1: = Område ("C2"), _order1: = xlAscending, Header: = xlJa

Finne

Find er også en metode for Range Object. Den finner den første cellen som har innhold som samsvarer med søkekriteriene og returnerer cellen som et Range -objekt. Det kommer tilbake Ingenting hvis det ikke er noen match.

Bruk Finn neste metode (eller FindPrevious) for å finne neste (forrige) forekomst.

Følgende kode vil endre skriften til "Arial Black" for alle celler i området som starter med "John":

12345 For hver c i rekkevidde ("A1: A100")Hvis c Like "John*" Dac.Font.Name = "Arial Black"Slutt omNeste c

Følgende kode vil erstatte alle forekomster av "å teste" til "bestått" i det angitte området:

12345678910 Med rekkevidde ("a1: a500")Sett c = .Find ("To Test", LookIn: = xlValues)Hvis ikke c er ingenting dafirstaddress = c.AdressGjørec.Value = "Bestått"Sett c = .FindNext (c)Loop While Not c is Nothing And c.Adress firstaddressSlutt omSlutt med

Det er viktig å merke seg at du må angi et område for å bruke FindNext. Du må også gi en stopptilstand, ellers vil løkken utføres for alltid. Normalt lagres adressen til den første cellen som blir funnet i en variabel, og sløyfen stoppes når du kommer til cellen igjen. Du må også se etter saken når ingenting er funnet for å stoppe løkken.

Områdeadresse

Bruk Range.Address for å få adressen i A1 Style

123 MsgBox Range ("A1: D10"). Adresse'ellerDebug.Print Range ("A1: D10"). Adresse

Bruk xlReferenceStyle (standard er xlA1) for å få tillegg i R1C1 -stil

123 MsgBox Range ("A1: D10"). Adresse (ReferenceStyle: = xlR1C1)'ellerDebug.Print Range ("A1: D10"). Adresse (ReferenceStyle: = xlR1C1)

Dette er nyttig når du håndterer områder lagret i variabler og bare vil behandle for bestemte adresser.

Rekkevidde til Array

Det er raskere og enklere å overføre et område til en matrise og deretter behandle verdiene. Du bør deklarere matrisen som variant for å unngå å beregne størrelsen som kreves for å fylle ut området i matrisen. Arrayens dimensjoner er satt til å matche antall verdier i området.

123456789 Dim DirArray som variant'Lagre verdiene i området til matrisenDirArray = Område ("a1: a5"). Verdi'Sløyfe for å behandle verdieneFor hver c i DirArrayDebug.Print cNeste

Array to Range

Etter behandling kan du skrive Array tilbake til et område. For å skrive matrisen i eksemplet ovenfor til et område må du angi et område hvis størrelse samsvarer med antall elementer i matrisen.

Bruk koden nedenfor for å skrive matrisen til området D1: D5:

123 Område ("D1: D5"). Verdi = DirArrayOmråde ("D1: H1"). Verdi = Application.Transpose (DirArray)

Vær oppmerksom på at du må Transponere matrisen hvis du skriver den til en rad.

Sum rekkevidde

12 SumOfRange = Application.WorksheetFunction.Sum (område ("A1: A10"))Debug.Print SumOfRange

Du kan bruke mange tilgjengelige funksjoner i Excel i VBA -koden ved å spesifisere Application.WorkSheetFunction. før funksjonsnavnet som i eksemplet ovenfor.

Count Range

1234567 'Tell antall celler med tall i områdetCountOfCells = Application.WorksheetFunction.Count (område ("A1: A10"))Debug.Print CountOfCells'Antall antall ikke -tomme celler i områdetCountOfNonBlankCells = Application.WorksheetFunction.CountA (område ("A1: A10"))Debug.Print CountOfNonBlankCells

Skrevet av: Vinamra Chandra

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave