Ik heb deze methode gevonden om de laatste gegevens met rij in een blad te vinden:
ws.Range("A65536").End(xlUp).row
Is er een vergelijkbare methode om de laatste kolom met gegevens in een blad te vinden?
Antwoord 1, autoriteit 100%
Veel manieren om dit te doen. De meest betrouwbare is vinden.
Dim rLastCell As Range
Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
MsgBox ("The last used column is: " & rLastCell.Column)
Als u de laatst gebruikte kolom in een bepaalde rij wilt vinden, kunt u het volgende gebruiken:
Dim lColumn As Long
lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column
Gebruikt bereik gebruiken (minder betrouwbaar):
Dim lColumn As Long
lColumn = ws.UsedRange.Columns.Count
Het gebruik van een gebruikt bereik werkt niet als u geen gegevens in kolom A hebt. Zie hier voor een ander probleem met het gebruikte bereik:
Zie Hierover het resetten van het gebruikte bereik.
Antwoord 2, autoriteit 18%
Ik weet dat dit oud is, maar ik heb dit op veel manieren getest en het heeft me nog niet in de steek gelaten, tenzij iemand me anders kan vertellen.
Rijnummer
Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Kolombrief
ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)
Kolomnummer
ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Antwoord 3, autoriteit 2%
Probeer de code te gebruiken nadat je het blad hebt geactiveerd:
Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Als u alleen Cells.SpecialCells(xlCellTypeLastCell).Row
gebruikt, is het probleem dat de xlCellTypeLastCell
-informatie niet wordt bijgewerkt, tenzij u een “Bestand opslaan” uitvoert actie. Maar als u UsedRange
gebruikt, wordt de informatie altijd in realtime bijgewerkt.
Antwoord 4, autoriteit 2%
Ik denk dat we de UsedRange
-code van @Readify’s-antwoord hierboven kunnen aanpassen om de laatst gebruikte kolom, zelfs als de startkolommen leeg zijn of niet.
Dus deze lColumn = ws.UsedRange.Columns.Count
gewijzigd in
deze lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1
geeft altijd betrouwbare resultaten
?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1
Boven regel levert 9
op in het directe venster.
Antwoord 5
Hier is iets dat nuttig kan zijn. De hele kolom selecteren op basis van een rij met gegevens, in dit geval gebruik ik de 5e rij:
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Antwoord 6
Ik gebruik de @Reafidy method/answeral heel lang, maar vandaag kwam ik een probleem tegen met de bovenste rij wordt samengevoegde cel van A1–>N1 en mijn functie retourneert de “Laatste kolom” als 1 niet 14.
Hier is mijn gewijzigde functie die nu rekening houdt met mogelijk samengevoegde cellen:
Public Function Get_lRow(WS As Worksheet) As Integer
On Error Resume Next
If Not IsWorksheetEmpty(WS) Then
Get_lRow = WS.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim Cell As Range
For Each Cell In WS.UsedRange
If Cell.MergeCells Then
With Cell.MergeArea
If .Cells(.Cells.Count).Row > Get_lRow Then Get_lRow = .Cells(.Cells.Count).Row
End With
End If
Next Cell
Else
Get_lRow = 1
End If
End Function
Public Function Get_lCol(WS As Worksheet) As Integer
On Error Resume Next
If Not IsWorksheetEmpty(WS) Then
Get_lCol = WS.Cells.Find(What:="*", after:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Dim Cell As Range
For Each Cell In WS.UsedRange
If Cell.MergeCells Then
With Cell.MergeArea
If .Cells(.Cells.Count).Column > Get_lCol Then Get_lCol = .Cells(.Cells.Count).Column
End With
End If
Next Cell
Else
Get_lCol = 1
End If
End Function
Antwoord 7
Dit is een eenvoudige optie als uw gegevens op de eerste rij beginnen.
MsgBox "Last Row: " + CStr(Application.WorksheetFunction.CountA(ActiveSheet.Cells(1).EntireRow))
Het gebruikt gewoon CountA
om het aantal kolommen met gegevens in de hele rij te tellen.
Dit heeft allerlei scenario’s waarin het nietwerkt, bijvoorbeeld als je meerdere tabellen hebt die de bovenste rij delen, maar voor een paar snelle & makkelijke dingen het werkt perfect.