Hitta sista & första raden, kolumnen och cellen
I detta tips visas ett flertal tekniker för att identifiera sista använda och / eller första tomma raden, kolumnen eller cellen i ett arbetsblad.
Det är inte alltid klart vad som i XL avses med sista cellen. Sista cellen med värde i sig kan utgöra det önskade utfallet eller sista cellen med formatering i sig kan också utgöra det vi vill erhålla. Nedanstående tekniker erbjuder dock möjligheten att utforska dessa frågor.
Ett flertal procedurer ger samma resultat. Syftet är dock att visa att flera alternativa lösningar leder till samma utfall.
Option Explicit
'© 2001 Alla rättigheter XL-Dennis
'Exemplena förutsätter att åtminstone cellen "A1" håller ett värde.
Sub Hitta_Rad_Range()
'Hitta radnumret för sista ifyllda cellen i kolumnen.
MsgBox Range("A65536").End(xlUp).Row
'Hitta radnumret för första tomma cellen i kolumnen.
MsgBox Range("A65536").End(xlUp).Row + 1
'Hitta sista ifyllda cellen i kolumnen.
MsgBox Range("A65536").End(xlUp).AddressLocal
'Hitta första tomma cellen i kolumnen.
MsgBox Range("A65536").End(xlUp).Offset(1, 0).AddressLocal
End Sub
'*****************************************************
Sub Hitta_Kolumn_Range()
'Hitta kolumnadressen för sista ifyllda cellen i raden.
MsgBox Range("IV1").End(xlToLeft).Column
'Hitta kolumnnumret för första tomma cellen i raden.
MsgBox Range("IV1").End(xlToLeft).Column + 1
'Hitta sista ifyllda cellen i raden.
MsgBox Range("IV1").End(xlToLeft).AddressLocal
'Hitta första tomma cellen i raden.
MsgBox Range("IV1").End(xlToLeft).Offset(0, 1).AddressLocal
End Sub
'*****************************************************
Sub Hitta_Rad_Cells()
'Hitta radnumret för sista ifyllda cellen i kolumnen.
MsgBox Cells(65536, "A").End(xlUp).Row
'Hitta radnumret för första tomma cellen i kolumnen.
MsgBox Cells(65536, "A").End(xlUp).Row + 1
'Hitta sista ifyllda cellen i kolumnen.
MsgBox Cells(65536, "A").End(xlUp).AddressLocal
'Hitta första tomma cellen i kolumnen.
MsgBox Cells(65536, "A").End(xlUp).Offset(1, 0).AddressLocal
End Sub
'*****************************************************
Sub Hitta_Kolumn_Cells()
'Hitta kolumnnumret för sista ifyllda cellen i raden.
MsgBox Cells.Find("*", Range("A1"), xlFormulas, _
xlPart, xlByColumns, xlPrevious).Column
'Hitta kolumnnumret för första tomma cellen i raden.
MsgBox Cells.Find("*", Range("A1"), xlFormulas, _
xlPart, xlByColumns, xlPrevious).Column + 1
'Hitta kolumnadressen för sista ifyllda cellen i raden.
MsgBox Cells.Find("*", Range("A1"), xlFormulas, _
xlPart, xlByColumns, xlPrevious).AddressLocal
'Hitta kolumnadressen för första tomma cellen i raden.
MsgBox Cells.Find("*", Range("A1"), xlFormulas, _
xlPart, xlByColumns, xlPrevious).Offset(0, 1).AddressLocal
End Sub'*****************************************************
Sub Hitta_Sista_Anvanda_Raden_Arbetsbladet()
Dim lnSistaRaden As Long
'Hitta sista raden som hållet ett text- eller talvärde.
'Här sker sökning radvis och baklänges.
lnSistaRaden = Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
MsgBox lnSistaRaden
End Sub
'*****************************************************
Sub Hitta_Sista_Anvanda_Kolumnen_Arbetsbladet()
'Hitta sista kolumnen som hållet ett text- eller talvärde.
'Här sker sökning kolumnvis och baklänges.
Dim iSistaKolumnen As Integer
iSistaKolumnen = Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
MsgBox iSistaKolumnen
End Sub
'*****************************************************
Sub Hitta_Sista_Cellen_med_Varde()
'Hitta sista cellen som hållet ett text- eller talvärde
MsgBox Cells.Find(What:="*", After:=Range("A1"), _
SearchDirection:=xlPrevious).AddressLocal
End Sub
Sub Hitta_Sista_Anvanda_Cellen_Arbetsbladet()
'Här identifieras den sista cellen med ett värde eller formatering.
MsgBox ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).AddressLocal
End Sub'*****************************************************
Sub Hitta_Sista_Anvanda_Cellen_Varde_Arbetsbladet()
'Här identifieras "sista" cellen med ett värde i sig enligt XL's logik.
'Med denna ansats hittas inte alltid rätt cell!
Dim iSistaKolumnen As Integer
Dim lnSistaRaden As Long
Dim rnSistaCellen As Range
'Här sker sökning radvis och baklänges
lnSistaRaden = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Här sker sökning kolumnvis och baklänges
iSistaKolumnen = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
MsgBox Cells(lnSistaRaden, iSistaKolumnen).AddressLocal
End Sub