Ik probeer de laatste rij op dezelfde manier te vinden als de laatste kolom:
Sheets("Sheet2").Cells(1,Sheets("Sheet2").Columns.Count).End(xlToLeft).Column
Ik ken deze manier, maar het is niet zo nuttig als de vorige zou zijn:
u = Sheets("Sheet1").Range("A65536").End(xlUp).Row
Ik heb het geprobeerd:
Sheets("Sheet2").Cells(Sheets("Sheet2",1).Rowa.Count).End(xlToUP).Column
Synopsis: ik wil graag de onderstaande manier voor de laatste rij.
Sheets("Sheet2").Cells(1,Sheets("Sheet2").Columns.Count).End(xlToLeft).Column
Antwoord 1, autoriteit 100%
U moet een with-statement gebruiken om zowel het aantal Rows
als Columns
te kwalificeren. Dit voorkomt fouten tijdens het werken met oudere Excel-werkmappen van vóór 2007 en nieuwere 2007.
Laatste kolom
With Sheets("Sheet2")
.Cells(1, .Columns.Count).End(xlToLeft).Column
End With
Laatste rij
With Sheets("Sheet2")
.Range("A" & .Rows.Count).End(xlUp).Row
End With
Of
With Sheets("Sheet2")
.Cells(.Rows.Count, 1).End(xlUp).Row
End With
Antwoord 2, autoriteit 25%
Hoe is dit?
dim rownum as integer
dim colnum as integer
dim lstrow as integer
dim lstcol as integer
dim r as range
'finds the last row
lastrow = ActiveSheet.UsedRange.Rows.Count
'finds the last column
lastcol = ActiveSheet.UsedRange.Columns.Count
'sets the range
set r = range(cells(rownum,colnum), cells(lstrow,lstcol))
Antwoord 3, autoriteit 18%
Deze functie zou voldoende moeten zijn als u een bepaald blad wilt specificeren. Ik nam de oplossing van user6432984 en wijzigde deze om geen fouten te veroorzaken. Ik gebruik Excel 2016, dus het werkt mogelijk niet voor oudere versies:
Function findLastRow(ByVal inputSheet As Worksheet) As Integer
findLastRow = inputSheet.cellS(inputSheet.Rows.Count, 1).End(xlUp).Row
End Function
Dit is de code die moet worden uitgevoerd als u al in het blad werkt waarvan u de laatste rij wilt vinden:
Dim lastRow as Integer
lastRow = cellS(Rows.Count, 1).End(xlUp).Row
Antwoord 4, autoriteit 7%
Ik gebruik deze routine om het aantal gegevensrijen te vinden. Er is een minimum aan overhead vereist, maar door te tellen met een afnemende schaal, vereist zelfs een zeer groot resultaat weinig iteraties. Een resultaat van 28.395 zou bijvoorbeeld slechts 2 + 8 + 3 + 9 + 5 of 27 keer door de lus vereisen, in plaats van een tijdrovende 28.395 keer.
Zelfs als we dat met 10 zouden vermenigvuldigen (283.950), is het aantal herhalingen 27 keer hetzelfde.
Dim lWorksheetRecordCountScaler as Long
Dim lWorksheetRecordCount as Long
Const sDataColumn = "A" '<----Set to column that has data in all rows (Code, ID, etc.)
'Count the data records
lWorksheetRecordCountScaler = 100000 'Begin by counting in 100,000-record bites
lWorksheetRecordCount = lWorksheetRecordCountScaler
While lWorksheetRecordCountScaler >= 1
While Sheets("Sheet2").Range(sDataColumn & lWorksheetRecordCount + 2).Formula > " "
lWorksheetRecordCount = lWorksheetRecordCount + lWorksheetRecordCountScaler
Wend
'To the beginning of the previous bite, count 1/10th of the scale from there
lWorksheetRecordCount = lWorksheetRecordCount - lWorksheetRecordCountScaler
lWorksheetRecordCountScaler = lWorksheetRecordCountScaler / 10
Wend
lWorksheetRecordCount = lWorksheetRecordCount + 1 'Final answer
Antwoord 5, autoriteit 7%
Dit geeft u de laatst gebruikte rij in een opgegeven kolom.
Optioneel kunt u het werkblad specificeren, anders wordt het actieve werkblad gebruikt.
Function getLastRow(col As Integer, Optional ws As Worksheet) As Long
If ws Is Nothing Then Set ws = ActiveSheet
If ws.Cells(ws.Rows.Count, col).Value <> "" Then
getLastRow = ws.Cells(ws.Rows.Count, col).Row
Exit Function
End If
getLastRow = ws.Cells(Rows.Count, col).End(xlUp).Row
If shtRowCount = 1 Then
If ws.Cells(1, col) = "" Then
getLastRow = 0
Else
getLastRow = 1
End If
End If
End Function
Sub test()
Dim lgLastRow As Long
lgLastRow = getLastRow(2) 'Column B
End Sub
Antwoord 6, autoriteit 4%
Dit is de beste manier die ik heb gezien om de laatste cel te vinden.
MsgBox ActiveSheet.UsedRage.SpecialCells(xlCellTypeLastCell).Row
Een van de nadelen van het gebruik hiervan is dat het niet altijd nauwkeurig is. Als je het gebruikt, verwijder dan de laatste paar rijen en gebruik het opnieuw, het wordt niet altijd bijgewerkt. Als u uw werkmap opslaat voordat u deze gebruikt, lijkt deze echter te worden geüpdatet.
Als u het volgende stukje code gebruikt na het bijwerken van de tabel (of het vernieuwen van de query die de tabel voedt), wordt alles geüpdatet voordat de laatste rij wordt gevonden. Maar er is gemeld dat het Excel laat crashen. Hoe dan ook, als u dit aanroept voordat u de laatste rij probeert te vinden, zorgt u ervoor dat de tabel als eerste is bijgewerkt.
Application.CalculateUntilAsyncQueriesDone
Een andere manier om de laatste rij voor een bepaalde kolom te krijgen, als u de overhead niet erg vindt.
Function GetLastRow(col, row)
' col and row are where we will start.
' We will find the last row for the given column.
Do Until ActiveSheet.Cells(row, col) = ""
row = row + 1
Loop
GetLastRow = row
End Function
Antwoord 7
Ik zoek liever in de laatste lege cel:
Als u de laatste lege cel van de kolom wilt, kunt u dat doen
Dim sh as Worksheet, r as range
set sh = ActiveWorksheet 'if you want an other it's possible
'find a value
'Columns("A:D") 'to check on multiple columns
Set r = sh.Columns("A").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
'no value return first row
If r Is Nothing Then Set r = sh.Cells(1, "A") Else Set r = sh1.Cells(r.Row + 1, "A")
Als dit is om een nieuwe rij in te voegen, is zoeken op meerdere kolommen een goede keuze omdat de eerste kolom minder rijen kan bevatten dan de volgende kolommen
Antwoord 8
Ik gebruik de volgende functie uitgebreid. Zoals hierboven vermeld, kan het gebruik van andere methoden soms onnauwkeurige resultaten opleveren vanwege gebruikte bereikupdates, hiaten in de gegevens of verschillende kolommen met verschillende rijtellingen.
Voorbeeld van gebruik:
lastRow=FindRange("Sheet1","A1:A1000")
zou het laatst bezette rijnummer van het gehelebereik retourneren. U kunt elk gewenst bereik opgeven, van enkele kolommen tot willekeurige rijen, bijvoorbeeld FindRange(“Sheet1″,”A100:A150”)
Public Function FindRange(inSheet As String, inRange As String) As Long
Set fr = ThisWorkbook.Sheets(inSheet).Range(inRange).find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not fr Is Nothing Then FindRange = fr.row Else FindRange = 0
End Function
Antwoord 9
Problemen met normale methoden
Account voor lege rijen/kolommen –
Als u lege rijen of kolommen aan het begin van uw gegevens hebt, zullen methoden zoals UsedRange.Rows.Count en UsedRange.Columns.Count deze lege rijen overslaan (hoewel ze wel rekening houden met lege rijen / kolommen die de gegevens kunnen opsplitsen ), dus als u naar ThisWorkbook.Sheets(1).UsedRange.Rows.Count verwijst, slaat u regels over in gevallen waarin er lege rijen bovenaan uw blad staan, bijvoorbeeld op dit blad:
Hiermee wordt de bovenste rij van de telling overgeslagen en wordt 11 geretourneerd:
ThisWorkbook.Sheets(1).UsedRange.Rows.Count
Deze code bevat de lege rij en retourneert in plaats daarvan 12:
ThisWorkbook.Sheets(1).UsedRange.Cells(ThisWorkbook.Sheets(1).UsedRange.Rows.Count, 1).Row
Hetzelfde probleem geldt voor kolommen.
Volledige bladen –
Het identificeren van de laatste rij of kolom kan moeilijk zijn als uw blad vol is (dit is alleen van belang als uw gegevens meer dan een miljoen regels bevatten of waarden in de laatste rijen of kolommen van uw gegevens kunnen hebben). Als u bijvoorbeeld xlEndUp of iets dergelijks gebruikt en de cel waarnaar u verwijst is gevuld, zal de code gegevens overslaan, in extreme gevallen kan uw hele gegevensset worden overgeslagen als de gegevens bijvoorbeeld doorgaan vanaf de laatste rij van het blad (waar u uw xlEndUp start) stevig tot aan de eerste rij (in dit geval zou het resultaat 1) zijn.
'This code works, but...
'Will not function as intended if there is data in the cell you start with (Cell A:1048576).
Dim Sht1 as Range: Set Sht1 = ThisWorkbook.Sheets(1)
Sht1.Cells(Sht1.Rows.Count, 1).End(xlUp).Row
Kolommen met lege rijen –
De bovenstaande code gaat er ook van uit dat uw gegevens zich helemaal naar beneden in kolom 1 uitstrekken, als u lege vermeldingen in kolom 1 heeft, kunt u rijen kwijtraken, omdat de code de eerste gevulde rij van onderen vindt alleenvoor kolom 1.
Onnodige lussen –
Spreekt voor zich, het is het beste om waar mogelijk lusvorming te vermijden, alsof u met veel gegevens te maken hebt en als u het lusproces vaak herhaalt, kan dit uw code vertragen.
Oplossing
Houd er rekening mee dat dit is gericht op het vinden van de laatste “gebruikte” rij of kolom op een heel blad, dit werkt niet als u alleen de laatste cel in een specifiek bereik wilt.
Ik heb hier enkele functies ingesteld
Private Function GetLastRow(Sheet As Worksheet)
'Gets last used row # on sheet.
GetLastRow = Sheet.UsedRange.Cells(Sheet.UsedRange.Rows.Count, 1).Row
End Function
Private Function GetLastCol(Sheet As Worksheet)
'Gets last used column # on sheet.
GetLastCol = Sheet.UsedRange.Cells(1, Sheet.UsedRange.Columns.Count).Column
End Function
Voorbeelden van het aanroepen van deze functies:
Sub CallFunctions()
'Define the Target Worksheet we're interested in:
Dim Sht1 As Worksheet: Set Sht1 = ThisWorkbook.Sheets(1)
'Print the last row and column numbers:
Debug.Print "Last Row = "; GetLastRow(Sht1)
Debug.Print "Last Col = "; GetLastCol(Sht1)
End Sub