Markering af område
Nu skal vi rigtig i gang med programmeringen! Første udfordring er at markere et område. Det lyder umiddelbart trivielt, men kan godt indeholde sjove udfordringer - f.eks. i det tilfælde, at vi ikke ved, hvor mange linjer, der er i et datasæt, men gerne vil markere hele datasættet.
Range objektet er det objekt vi skal have fat i her - det har følgende syntaks:
Det fungerer på følgende måde:
Range("A2").Select - markerer celle A2
Range("A2:B7").Select - markerer området A2:B7
Range("A2", "B7").Select - markerer også området A2:B7
Det er jo rimelig simpelt. Men, hvad så hvis man vil markere sidste celle i kolonne B, men man ved ikke hvor stort datasættet er? - det kan man gøre sådan her:
Range("B1").End(xlDown).Select
Og markering af hele kolonne B
Range("B1", Range("B1").End(xlDown)).Select
Hvad så med cellen lige under den sidste celle i B kolonnen:
Range("B1").End(xlDown).Offset(1,0).Select
De tre sidste metoder forudsætter faktisk at der står noget i alle cellerne i kolonne B i datasættet samt at der er mere end én linje i datasættet.
Vil du være sikker på, at det virker også i det tilfælde, hvor der kun er én linje i datasættet starter man nedefra i stedet:
Dim sidsteR As Long
sidsteR = ActiveSheet.Rows.Count
Range("B" & sidsteR).End(xlUp).Select
Range(Range("B2"), Range("B" & sidsteR).End(xlUp)).Select
Range("B" & sidsteR).End(xlUp).Offset(1, 0).Select
Er der huller i datasættet må man tage udgangspunkt i en kolonne, hvor man er sikker på, at der ikke er huller og bruge Range(Celle1 , Celle2).Select til at fange området. Celle1 kan "bare" være toppen af kolonnen med huller og Celle2 skal jo være den sidste celle i kolonnen med huller i. Bruger du Range(Celle).End(xlDown) på én kolonne uden huller kan du med Offset flytte over så du peger på den sidste celle i kolonnen med huller.
Arbejder du med navngivne celler kan du også skrive
Range("RabatCelle").Select ' vil markere den/de celler der hedder RabatCelle
(forudsætter, at den/de faktisk findes!)
Læg mærke til, at du også kan arbejde med områder, der ikke er på den aktuelle arkfane:
Worksheets("Ark3").Range("D10")
Workbooks("Salg.xls").Worksheets("Ark2").Range("D10")
Pas på, hvis du skal arbejde på et område på f.eks. Ark3 skal det se sådan her ud:
Worksheets("Ark3").Range("D10", Worksheets("Ark3").Range("D10").End(xlDown))
Eller smartere
With Worksheets("Ark3")
.Range("D10", .Range("D10").End(xlDown))
End With
Specielle celler
En interessant metode! Du kender måske muligheden for at gå til specielle celler fra menuen Rediger | Gåtil
Den kan også kaldes inde fra VBA - et lille eksempel på det:
Dim rgSidste As Range
Dim lSidsteRække, lSidsteKolonne As Long
Set rgLast = Range("A1").SpecialCells(xlCellTypeLastCell)
lSidsteRække = rgSidste.Row
lSidsteKolonne = rgSidste.Column
Læg mærke til, at Excel tager alle celler med, der har været brugt siden regnearket blev åbnet - også celler du har slettet igen. Det betyder at du ikke kan være 100% sikker på denne funktion med mindre regnearket lige er blevet gemt/åbnet.
Et lille eksempel der virker under alle omstændigheder...
Dim lSidsteRække, lSidsteKolonne As Long
Range("A1").Select
On Error Resume Next
lSidsteRække = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
lSidsteKolonne = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column
Cells(lSidsteRække, lSidsteKolonne).Select
Current region
Du kender sikkert muligheden for at trykke Ctrl + * fra tastaturet for at markere hele det dataområde der er omkring en celle. Det samme kan du fra VBA:
Range("D7").CurrentRegion.Select