Excel VBA -intervaller og -celler

Ranger og celler i VBA

Excel -regneark gemmer data i celler. Celler er arrangeret i rækker og kolonner. Hver celle kan identificeres ved skæringspunktet for dens række og kolonne (eks. B3 eller R3C2).

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

Celleadresse

A1 Notation

I A1 -notation henvises til en celle med dens kolonnebogstav (fra A til XFD) efterfulgt af dens rækkenummer (fra 1 til 1.048.576).

I VBA kan du referere til enhver celle ved hjælp af Områdeobjekt.

123456789 'Se celle B4 på det aktuelt aktive arkMsgBox -område ("B4")'Se celle B4 på arket med navnet' Data 'MsgBox -regneark ("Data"). Område ("B4")'Se celle B4 på arket med navnet' Data 'i en anden ÅBEN projektmappe'navngivet' Mine data 'MsgBox Workbooks ("Mine data"). Regneark ("Data"). Område ("B4")

R1C1 Notation

I R1C1 -notation henvises en celle med R efterfulgt af rækkenummer og derefter bogstavet 'C' efterfulgt af kolonnenummeret. f.eks. B4 i R1C1 -notation vil blive henvist med R4C2. I VBA bruger du Celler Objekt at bruge R1C1 -notation:

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

Rækkevidde af celler

A1 Notation

For at referere til mere end én celle skal du bruge et “:” mellem startcelleadressen og den sidste celleadresse. Det følgende vil referere til alle cellerne fra A1 til D10:

1 Område ("A1: D10")

R1C1 Notation

For at referere til mere end én celle skal du bruge et “,” mellem startcelleadressen og den sidste celleadresse. Det følgende vil referere til alle cellerne fra A1 til D10:

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

Skriv til celler

For at skrive værdier til en celle eller en sammenhængende gruppe af celler skal du blot henvise til intervallet, sætte et = -tegn og derefter skrive værdien, der skal gemmes:

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

Læsning fra celler

For at læse værdier fra celler skal du blot henvise til variablen for at gemme værdierne, sætte et = -tegn og derefter henvise til det område, der skal læses:

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

Bemærk: For at gemme værdier fra en række celler skal du bruge et array i stedet for en simpel variabel.

Ikke sammenhængende celler

For at henvise til ikke -sammenhængende celler skal du bruge et komma mellem celleadresserne:

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

Skæringspunkt mellem celler

For at referere til ikke -sammenhængende celler skal du bruge et mellemrum mellem celleadresserne:

123 'Opbevar' Col D 'i D1: D10'som er fælles mellem A1: D10 og D1: F10Område ("A1: D10 D1: G10") = "Col D"

Offset fra en celle eller et område

Ved hjælp af forskydningsfunktionen kan du flytte referencen fra et givet område (celle eller gruppe af celler) med de angivne antal_række og antal_kolonner.

Offset syntaks

Område. Forskydning (antal_række, antal_kolonner)

Offset fra en celle

12345678910111213141516 'OFFSET fra en celle A1'Henvis til selve cellen'Flyt 0 rækker og 0 kolonnerOmråde ("A1"). Offset (0, 0) = "A1"'Flyt 1 rækker og 0 kolonnerOmråde ("A1"). Offset (1, 0) = "A2"'Flyt 0 rækker og 1 kolonnerOmråde ("A1"). Offset (0, 1) = "B1"'Flyt 1 rækker og 1 kolonnerOmråde ("A1"). Offset (1, 1) = "B2"'Flyt 10 rækker og 5 kolonnerOmråde ("A1"). Offset (10, 5) = "F11"

Offset fra en rækkevidde

123 'Flyt reference til område A1: D4 med 4 rækker og 4 kolonner'Ny reference er E5: H8Område ("A1: D4"). Offset (4,4) = "E5: H8"

Indstilling af reference til et område

For at tildele et område til en områdevariabel: angiv en variabel af typen Range, og brug derefter kommandoen Set til at indstille det til et område. Bemærk, at du skal bruge kommandoen SET, da RANGE er et objekt:

12345678 'Angiv en variabel for områdeDim myRange som Range'Indstil variablen til intervallet A1: D4Indstil myRange = Range ("A1: D4")'Udskriver $ A $ 1: $ D $ 4MsgBox myRange.Adresse

Ændre størrelsen på et område

Ændre størrelse på metode til områdeobjekt ændrer dimensionen af ​​referenceområdet:

1234567 Dim myRange As Range'Område for at ændre størrelseIndstil myRange = Range ("A1: F4")'Udskriver $ A $ 1: $ E $ 10Debug.Print myRange.Resize (10, 5) .Adresse

Cellen øverst til venstre i det ændrede område er den samme som den øverste venstre celle i det originale område

Ændre størrelse på syntaks

Område. Størrelse (antal_række, antal_kolonner)

OFFSET vs Resize

Offset ændrer ikke områdets dimensioner, men flytter det med det angivne antal rækker og kolonner. Tilpas størrelse ændrer ikke placeringen af ​​det originale område, men ændrer dimensionerne til det angivne antal rækker og kolonner.

Alle celler i ark

Celleobjektet refererer til alle cellerne i arket (1048576 rækker og 16384 kolonner).

12 'Ryd alle celler i regnearkCeller.Ryd

UsedRange

Egenskaben UsedRange giver dig det rektangulære område fra cellen øverst til venstre i cellen til den anvendte celle i højre side i det aktive ark.

1234567 Dim ws Som regnearkIndstil ws = ActiveSheet'$ B $ 2: $ L $ 14, hvis L2 er den første celle med en hvilken som helst værdi'og L14 er den sidste celle med en hvilken som helst værdi på'aktivt arkDebug.Print ws.UsedRange.Address

CurrentRegion

CurrentRegion-egenskaben giver dig det sammenhængende rektangulære område fra cellen øverst til venstre til den højre celle-nederste celle, der indeholder den celle/område, der refereres til.

1234567891011 Dim myRange As RangeIndstil myRange = Range ("D4: F6")'Udskriver $ B $ 2: $ L $ 14'Hvis der er en fyldt sti fra D4: F16 til B2 OG L14Debug.Print myRange.CurrentRegion.Address'Du kan også henvise til en enkelt startcelleIndstil myRange = Range ("D4") 'Udskriver $ B $ 2: $ L $ 14

Områdeegenskaber

Du kan få adresse, række/kolonnummer i en celle og antal rækker/kolonner i et område som angivet nedenfor:

123456789101112131415161718192021 Dim myRange As RangeIndstil myRange = Range ("A1: F10")'Udskriver $ A $ 1: $ F $ 10Debug.Print myRange.AddressIndstil myRange = Range ("F10")'Udskriver 10 til række 10Debug.Print myRange.Row'Udskriver 6 til kolonne FDebug.Print myRange.ColumnIndstil myRange = Range ("E1: F5")'Udskriver 5 for antal rækker inden for rækkeviddeDebug.Print myRange.Rows.Count'Udskriver 2 for antallet af kolonner inden for rækkeviddeDebug.Print myRange.Columns.Count

Sidste celle i ark

Du kan bruge Rækker. Tæller og Kolonner.Tælling ejendomme med Celler objekt for at få den sidste celle på arket:

1234567891011 'Udskriv det sidste rækkenummer'Udskriver 1048576Debug.Print "Rækker i arket:" & Rows.Count'Udskriv det sidste kolonnenummer'Udskriver 16384Debug.Print "Kolonner i arket:" & Columns.Count'Udskriv adressen på den sidste celle'Udskriver $ XFD $ 1048576Debug.Print "Adresse for sidste celle i arket:" & Celler (Rows.Count, Columns.Count)

Sidst anvendte rækkenummer i en kolonne

END -egenskaben tager dig den sidste celle i området, og End (xlUp) fører dig op til den første brugte celle fra den celle.

123 Dim lastRække så længelastRow = Celler (Rows.Count, "A"). Slut (xlUp) .Row

Sidst anvendte kolonnenummer i en række

123 Dim lastCol så længelastCol = Celler (1, Columns.Count) .End (xlToLeft) .Column

END -egenskaben tager dig den sidste celle i området, og End (xlToLeft) tager dig tilbage til den første brugte celle fra den celle.

Du kan også bruge egenskaberne xlDown og xlToRight til at navigere til de første nederste eller højre brugte celler i den aktuelle celle.

Celleegenskaber

Fælles ejendomme

Her er kode til visning af almindeligt anvendte celleegenskaber

12345678910111213141516171819202122 Dim celle som områdeIndstil celle = område ("A1")celle.AktiverDebug.Print cell.Adress'Udskriv $ A $ 1Debug.Print cell.Value'Udskriver 456'AdresseDebug.Print cell.Formula'Udskriver = SUM (C2: C3)'KommentarDebug.Print cell.Comment.Text'StilDebug.Print cell.Style'CelleformatDebug.Print cell.DisplayFormat.NumberFormat

Celle skrifttype

Cell.Font -objekt indeholder egenskaber for celleskrifttypen:

1234567891011121314151617181920 Dim celle som områdeIndstil celle = område ("A1")'Almindelig, kursiv, fed og fed kursivcell.Font.FontStyle = "Fed kursiv"' Samme somcell.Font.Bold = Sandtcell.Font.Italic = Sandt'Indstil skrifttype til Couriercell.Font.FontStyle = "Courier"'Indstil skrifttypefarvecell.Font.Color = vbBlue'ellercell.Font.Color = RGB (255, 0, 0)'Indstil skrifttypecell.Font.Size = 20

Kopiere og indsætte

Indsæt alle

Områder/celler kan kopieres og indsættes fra et sted til et andet. Den følgende kode kopierer alle egenskaberne for kildeområdet til destinationsområdet (svarer til CTRL-C og CTRL-V)

1234567 'Enkel kopiOmråde ("A1: D20"). KopiArbejdsark ("Ark2"). Område ("B10"). Indsæt'eller'Kopiér fra nuværende ark til ark med navnet' Sheet2 'Område ("A1: D20"). Kopidestination: = Regneark ("Ark2"). Område ("B10")

Indsæt special

Udvalgte egenskaber for kildeområdet kan kopieres til destinationen ved at bruge indstillingen PASTESPECIAL:

123 'Indsæt området kun som værdierOmråde ("A1: D20"). KopiRegneark ("Sheet2"). Område ("B10"). PasteSpecial Paste: = xlPasteValues

Her er de mulige muligheder for indsætningen Indsæt:

12345678910111213 'Indsæt særlige typerxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulas AndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

AutoFit indhold

Størrelse på rækker og kolonner kan ændres, så det passer til indholdet ved hjælp af nedenstående kode:

12345 'Skift størrelse på rækker 1 til 5 for at passe til indholdetRækker ("1: 5"). AutoFit'Skift størrelse på kolonner A til B, så det passer til indholdetKolonner ("A: B"). AutoFit

Flere rækkeeksempler

Det anbefales, at du bruger Macro Recorder, mens du udfører den nødvendige handling via GUI. Det hjælper dig med at forstå de forskellige muligheder, og hvordan du bruger dem.

For hver

Det er lettere at gå gennem et område ved hjælp af For hver konstruer som vist herunder:

123 For hver celle i området ("A1: B100")'Gør noget med cellenNæste celle

Ved hver iteration af sløjfen tildeles en celle i området variablen c, og sætninger i For -løkken udføres for den celle. Loop forlader, når alle cellerne behandles.

Sortere

Sort er en metode til Range -objekt. Du kan sortere et område ved at angive muligheder for at sortere til Range.Sort. Koden herunder sorterer kolonnerne A: C baseret på nøglen i celle C2. Sorteringsrækkefølge kan være xlAscending eller xlDescending. Overskrift: = xlJa skal bruges, hvis første række er overskriftsrækken.

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

Find

Find er også en metode til Range Object. Den finder den første celle med indhold, der matcher søgekriterierne, og returnerer cellen som et områdeobjekt. Det vender tilbage Ikke noget hvis der ikke er nogen match.

Brug FindNæste metode (eller FindPrevious) for at finde den næste (forrige) forekomst.

Følgende kode ændrer skrifttypen til "Arial Black" for alle celler i området, der starter med "John":

12345 For hver c In Range ("A1: A100")Hvis c kan lide "John*" Såc.Font.Name = "Arial Black"Afslut HvisNæste c

Følgende kode vil erstatte alle forekomster af "At teste" til "Bestået" i det angivne område:

12345678910 Med rækkevidde ("a1: a500")Indstil c = .Find ("To Test", LookIn: = xlValues)Hvis ikke c er ingenting Såfirstaddress = c.AdresseGørc.Value = "Bestået"Indstil c = .FindNext (c)Loop While Not c er ingenting og c.Adresse firstaddressAfslut HvisAfslut med

Det er vigtigt at bemærke, at du skal angive et område for at bruge FindNext. Du skal også angive en standsningstilstand, ellers vil løkken udføres for evigt. Normalt lagres adressen til den første celle, der findes, i en variabel, og sløjfen stoppes, når du når denne celle igen. Du skal også kontrollere for sagen, når der ikke er fundet noget til at stoppe sløjfen.

Områdeadresse

Brug Range.Address for at få adressen i A1 Style

123 MsgBox -område ("A1: D10"). Adresse'ellerDebug.Print Range ("A1: D10"). Adresse

Brug xlReferenceStyle (standard er xlA1) for at få addres i R1C1 -stil

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

Dette er nyttigt, når du beskæftiger dig med områder, der er gemt i variabler og kun ønsker at behandle for bestemte adresser.

Rækkevidde til Array

Det er hurtigere og lettere at overføre et område til et array og derefter behandle værdierne. Du bør erklære arrayet som variant for at undgå at beregne den størrelse, der kræves for at udfylde området i arrayet. Array dimensioner er indstillet til at matche antallet af værdier i området.

123456789 Dim DirArray som variant'Gem værdierne i området til ArrayDirArray = Range ("a1: a5"). Værdi'Sløjfe for at behandle værdierneFor hver c i DirArrayDebug.Print cNæste

Array til rækkevidde

Efter behandling kan du skrive Array tilbage til et område. For at skrive arrayet i eksemplet ovenfor til et område skal du angive et område, hvis størrelse svarer til antallet af elementer i arrayet.

Brug koden herunder til at skrive Array til området D1: D5:

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

Bemærk, at du skal omsætte arrayet, hvis du skriver det til en række.

Sum rækkevidde

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

Du kan bruge mange tilgængelige funktioner i Excel i din VBA -kode ved at angive Application.WorkSheetFunction. før funktionsnavnet som i eksemplet ovenfor.

Tæl rækkevidde

1234567 'Tæl antal celler med tal i områdetCountOfCells = Application.WorksheetFunction.Count (område ("A1: A10"))Debug.Print CountOfCells'Tæl antal ikke -tomme celler i områdetCountOfNonBlankCells = Application.WorksheetFunction.CountA (område ("A1: A10"))Debug.Print CountOfNonBlankCells

Skrevet af: Vinamra Chandra

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave