Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Navigera kalkylblad | Arbeta med Exceldata
Excel VBA för affärsautomatisering

Navigera kalkylblad

Svep för att visa menyn

Riktiga data har ingen etikett som talar om var de slutar. Att hårdkoda Range("A1:I5") slutar fungera den dag någon lägger till en sjätte order – därför behöver du fråga kalkylbladet var dess data slutar.

Hitta sista raden

Den mest använda kodraden i hela denna kurs:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Läs detta från höger till vänster: börja längst ner i kolumn A (ws.Rows.Count), hoppa uppåt (End(xlUp)) tills du träffar den första ifyllda cellen och returnera dess radnummer. Det fungerar oavsett hur många ordrar som finns.

Figur 3.2

Hitta sista kolumnen

Fungerar på samma sätt, men i sidled:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Rapporterar det fullständiga rektangulära området på bladet som någonsin har innehållit data — användbart för en snabb kontroll, men använd med försiktighet: det kommer ihåg celler som tidigare hade data även efter att du tagit bort innehållet, så det kan överskatta ditt faktiska dataområde.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Vanligtvis det bättre verktyget: det expanderar utåt från en enskild cell till det sammanhängande dataområdet runt omkring, och stannar vid första tomma raden eller kolumnen — exakt som ett rent tabellområde som Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Uppgift

  1. Skriv en Sub som hittar sista raden med hjälp av metoden End(xlUp) och skriver ut den i Direktfönstret.
  2. I samma Sub, hitta sista raden på ett annat sätt med CurrentRegion.Rows.Count, och skriv ut även det — bekräfta att de stämmer överens.
  3. Lägg manuellt till en sjätte order på rad 7 i bladet, kör makrot igen och bekräfta att båda metoderna nu rapporterar 7 utan några kodändringar:
Tips
expand arrow

1. Hitta sista raden med End(xlUp)

  • Börja längst ner i kolumn A och hoppa uppåt — samma mönster som i Kapitel 3:s avsnitt "Hitta sista raden".
  • Debug.Print resultatet så att det visas i Direktfönstret (Ctrl+G).

2. Hitta på ett annat sätt med CurrentRegion

  • CurrentRegion expanderar från en enskild startcell (prova Range("A1")) till hela det sammanhängande blocket.
  • .Rows.Count på det området inkluderar rubrikraden — kom ihåg kapitlets notering om att dra av 1 om du bara vill ha datarader. Eftersom denna uppgift bara ber dig jämföra de två metoderna, skriv ut det råa antalet först och resonera om rubriken i efterhand.

3. Lägg till en sjätte rad och kör igen

  • Inga kodändringar behövs — skriv bara in en ny order direkt på rad 7 i kalkylbladet och kör samma Sub igen.
Lösning
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 3. Kapitel 2
some-alt