Last in COLUMN, last in ROW, last CELL in use

Laatste cel in gebruik.
Als de kolom (of rij) waarvan je de laatste cel wilt bepalen en bestaat uit numerieke gegevens (al dan niet afgewisseld met lege cellen), kunt je de functie MATCH gebruiken:

=MATCH(1,0E+30;A:A) [ voor kolommen.]

=MATCH(1,0E+30;1:1) [ voor rijen; 1:1 betekent rij 1 ]

Geeft je de locatie van de laatste cel die in gebruik is (die een numerieke waarde bevat).

Opmerking. Deze formules gaan ervan uit dat er geen numerieke waarde zo groot als 1,0E+30 voorkomt onder de numerieke waarden van de kolom/rij die je test. MATCH vindt geen benaderende overeenkomst en retourneert de locatie (niet de ref) van de laatste cel met een numerieke waarde, wat precies is wat je zoekt.

Als je geïnteresseerd bent in het adres (ref) van de cel, breid dan de formule als volgt uit:

=ADDRESS(MATCH(1,0E+30;A:A);COLUMN(A:A)) [ for columns ]

=ADDRESS(ROW(1:1);MATCH(1,0E+30;1:1)) [ for rows ]

Als je geïnteresseerd bent in de waarde van de laatste cel die in gebruik is, omring dan de formules die de functie ADDRESS bevatten met INDIRECT:

=INDIRECT(ADDRESS(ROW(A1);COLUMN(A1)))
zal altijd naar cel A1 verwijzen, ongeacht waar je de formule kopieert.

Wat als het bereik waarin u geïnteresseerd bent uitsluitend uit tekstwaarden bestaat (afgewisseld met lege cellen)? Het bovenstaande schema zal dan niet werken. Hoewel er andere mogelijkheden zijn, zal ik gewoon de volgende (probleemloze) UDF’s posten:

Function LASTINCOLUMN(rng As Range)
' From J. Walkenbach, modified to return the row number [ Aladin Akyürek, Aug 8, 01 ]
Dim WorkRange As Range
Dim i As Integer, CellCount As Integer
Application.Volatile
Set WorkRange = rng.Columns(1).EntireColumn
Set WorkRange = Intersect(WorkRange.Parent.UsedRange, _
WorkRange)
CellCount = WorkRange.Count
For i = CellCount To 1 Step -1
If Not IsEmpty(WorkRange(i)) Then
LASTINCOLUMN = WorkRange(i).Row
Exit Function
End If
Next i
End Function

Function LASTINROW(rng As Range) As Variant
' From J. Walkenbach, modified to return the row number [ Aladin Akyürek, Aug 8, 01 ]
Dim WorkRange As Range
Dim i As Integer, CellCount As Integer
Application.Volatile
Set WorkRange = rng.Rows(1).EntireRow
Set WorkRange = Intersect(WorkRange.Parent.UsedRange, _
WorkRange)
CellCount = WorkRange.Count
For i = CellCount To 1 Step -1
If Not IsEmpty(WorkRange(i)) Then
LASTINROW = WorkRange(i).Column
Exit Function
End If
Next i
End Function

Plaats de code in een “module”.

Gebruik in werkblad:

=LASTINCOLUMN(A:A)

=LASTINROW(1:1)

geeft je de locatie van de laatst gebruikte cel (ongeacht of deze een tekstwaarde of een numerieke waarde bevat).

Leave a Reply

Your email address will not be published. Required fields are marked *