MS Excel - Range

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:

UsedRange

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

Top

UsedRange Voornaamtse Methodes.

Me.UsedRange.Clear : verwijdert alle waarden

Me.UsedRange.Activate : Selecteerd de Range

Top

Verwijderen 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