Hoe vind ik de laatste kolom met gegevens?

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).Rowgebruikt, is het probleem dat de xlCellTypeLastCell-informatie niet wordt bijgewerkt, tenzij u een “Bestand opslaan” uitvoert actie. Maar als u UsedRangegebruikt, 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.Countgewijzigd in

deze lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1geeft altijd betrouwbare resultaten

?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1

Boven regel levert 9op 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 CountAom 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.

Other episodes