Wat is een Range.
Een range kan beschouwd worden als een cel of een groep cellen of een Rij of een Kolom in een Worksheet.
Er zijn verschillende mogelijkheden om een Range te bepalen.
A1-stijl:
De Cells property geldig voor Range, Application en Worksheet
Worksheets("sheet4").range("A1:D10").Cells.Count
geeft 40
De Cells property is heel handig bij Loops
Public Sub av_test5()
Dim intRij As Integer
Dim intKol As Integer
For intKol = 1 To 10
For intRij = 1 To 10
'Application.Cells(intRij, intKol).Value = fGenerRand(1, 100) 'is oo OK
Application.ActiveSheet.Cells(intRij, intKol).Value = fGenerRand(1, 100)
Next intRij
Next intKol
End Sub
Volgende procedure geeft aantal rijen en kolommen voor zover deze een waarde hebben.
Public Sub av_test4()
Application.ScreenUpdating = False
Dim xRow As Long
Dim yCol As Long
'telt het aantal rijen vanaf A1 indien een waarde
xRow = Application.Cells(Rows.Count, 1).End(xlUp).Row 'telt het aantal rijen vanaf A1 indien een waarde
' telt het aantal kolommen van af kolom 1
yCol = Application.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox xRow & " " & yCol
Application.ScreenUpdating = True
End Sub
Top
Een Range een Naam geven
Een Range-naam kan op Workbook- of Worksheet-niveau gegeven worden. Men kan een Range-naam geven
via de gebruikersinterface of via VBA
Dit kan via volgende procedure
Public Sub sGeefRangeNaam()
Dim shtBlad As Worksheet
Dim rngRange As Range
Set shtBlad = ThisWorkbook.Worksheets("sheet4")
Set rngRange = shtBlad.Range("$E$1:$D$10")
shtBlad.Names.Add "nmNaam", RefersTo:=rngRange
End Sub
Top
Benoemde Range(s) zoeken
Public Sub sZoekRange()
Dim wrk As Excel.Workbook
Dim wsh As Excel.Worksheet
Dim rng As Excel.Range
Dim rngMeer As Range
Dim nm As Name
Dim intTEL As Integer
Dim aReeks(2) As Variant
Set wrk = Application.ActiveWorkbook
Set wsh = wrk.Worksheets("NaamRange")
intTEL = 0
Debug.Print wsh.Names.Count
For Each nm In wsh.Names
'Debug.Print nm.Name ' dit geeft NaamRange!mijnTestRange1 NaamRange!mijnTestRange2
'Debug.Print nm.RefersToR1C1 '=NaamRange!R1C1:R10C4
aReeks(intTEL) = nm.Name
'Set rng = Range(nm.Name)
'Debug.Print rng.Rows.Count
'Debug.Print rng.Columns.Count
'rng.Select
'Debug.Print nm.RefersTo '=NaamRange!$H$1:$H$15
intTEL = intTEL + 1
Next
Set rngMeer = Union(Range(aReeks(0)), Range(aReeks(1)))
rngMeer.Select
End Sub
Top
Van een Range een tabel maken.
Wij gaan ervan uit dat de Range begint in cel A1, vervolgens worden de rijen geteld, dan de kolommen waarbij het kolomnummer omgezet wordt in de kolom-letteraanduiding van Excel hierbij wordt gebruik gemaakt van de functie KonverteerNrLetter .
Public Sub sRangeNaarTabel()
Dim wsh3 As Worksheet
Dim lngRij As Long
Dim intKol As Integer
Dim rngStart As Range
Dim rngTemp As Range
Dim lsoDef As ListObject
Set wsh3 = ThisWorkbook.Worksheets("Sheet3")
'verticaal zoeken
Set rngStart = wsh3.Range("A1")
Do While Not IsEmpty(rngStart.Value)
Set rngStart = rngStart.Offset(1, 0)
lngRij = lngRij + 1
Loop
'horizontaal zoeken
Set rngStart = wsh3.Range("A1")
Do While Not IsEmpty(rngStart.Value)
Set rngStart = rngStart.Offset(0, 1)
intKol = intKol + 1
Loop
'tijdelijke Range bepalen
Set rngTemp = wsh3.Range("A1:" & KonverteerNrLetter(intKol) & CStr(lngRij))
'Listobject toevoegen
Set lsoDef = wsh3.ListObjects.Add(SourceType:=xlSrcRange, Source:=rngTemp) ' HasHeaders:=xlYes voor geimporteerde data
lsoDef.Name = "tblDef"
End Sub
Top
Behoort een Range tot een andere Range.
Public Function fRangeInRange(rngZoek As Range, rngRange As Range) As Boolean
'behoort rngZoek tot rngRange zoja geeft True
Dim rngIntersectie As Range
Set rngIntersectie = Application.Intersect(rngZoek, rngRange)
fRangeInRange = Not (rngIntersectie Is Nothing)
Set rngIntersectie = Nothing
End Function
Top
Een Range voeden met een Array.
Public Sub sRangeMetArray()
Dim aNamen(3, 3) As String
aNamen(0, 0) = "Depovere"
aNamen(0, 1) = "Jules"
aNamen(1, 0) = "Verplaetse"
aNamen(1, 1) = "Edwin"
aNamen(2, 0) = "Verzele"
aNamen(2, 1) = "Karel"
ThisWorkbook.Worksheets("Exp03").Range("A2:B4") = aNamen
End Sub
Top
Voornaamtse Eigenschappen.
UsedRange slaat op de volledige ruimte die in het werkblad wordt gebruikt.
Dit kan in principe ook over verschillende Ranges gaan.
Beschouwen we het volgende werkblad:
Me.UsedRange.Address geeft : $B$6:$O$13
Wat neerkomt op de eerste en de cel
van de laatste rij 13 en de laatste kolom O, ook al heeft deze geen waarde.
Me.UsedRange.Columns.Count geeft : 14
Dus van Kolom B tot en met Kolom O
Me.UsedRange.Rows.Count geeft: 8
Dus van Rij 6 tot en met Rij 13
Me.UsedRange.Areas.Count geeft : 1
Me.UsedRange.Areas.Item(1).Address geeft :$B$6:$O$13
Dus hetzelfde als de Address property
Me.UsedRange.Cells.Count geeft 112
Het aantal cellen in de Range $B$6:$O$13
Me.UsedRange.Count geeft ook 112
Het aantal cellen in de Range $B$6:$O$13
Me.UsedRange.CurrentRegion.Address geeft : $B$6:$O$13
Me.UsedRange.CurrentRegion.Areas.Count geeft : 1
TopUsedRange Voornaamtse Methodes.
Me.UsedRange.Clear : verwijdert alle waarden
Me.UsedRange.Activate : Selecteerd de Range
TopVerwijderen van Lege Rijen
Public Sub sVerwijderLeegR()
'maakt gebruik van de UsedRange property
Dim wsh As Worksheet
Dim rngTotaal As Range
Dim inttel As Integer
Set wsh = ThisWorkbook.Worksheets("Exp02")
Set rngTotaal = wsh.UsedRange
'tel het aantal rijen
For inttel = rngTotaal.Rows.Count To 1 Step -1
If Application.WorksheetFunction.CountBlank(rngTotaal.Rows(inttel)) Then
'MsgBox "rij " & rngTotaal.Rows(inttel).Row & " is leeg"
Rows(inttel).Delete
End If
Next
End Sub
Top
hallo