Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Navigere i regneark | Arbejde med Excel-data
Excel VBA til Forretningsautomatisering

Navigere i regneark

Stryg for at vise menuen

Rigtige data kommer ikke med en etiket, der fortæller dig, hvor de slutter. At hardkode Range("A1:I5") fejler den dag, nogen tilføjer en sjette ordre — derfor skal du spørge arket, hvor dets data slutter.

Find den sidste række

Den mest anvendte kodelinje i hele dette kursus:

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

Læs dette fra højre mod venstre: start helt nederst i kolonne A (ws.Rows.Count), hop opad (End(xlUp)) indtil du rammer den første udfyldte celle, og returnér dens rækkenummer. Det virker uanset, hvor mange ordrer der findes.

Figur 3.2

Find den sidste kolonne

Fungerer på samme måde, men vandret:

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

UsedRange

Rapporterer det fulde rektangulære område på arket, der nogensinde har indeholdt data — nyttigt til et hurtigt overblik, men brug det med forsigtighed: det husker celler, der tidligere har indeholdt data, selv efter du har slettet indholdet, så det kan overvurdere dit faktiske dataområde.

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

CurrentRegion

Normalt det bedre værktøj: udvider sig udad fra en enkelt celle til det sammenhængende datablok omkring den og stopper ved den første tomme række eller kolonne — matcher præcist en ren tabel 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

Opgave

  1. Skriv en Sub, der finder den sidste række ved hjælp af End(xlUp)-metoden og udskriver den til Immediate Window.
  2. I samme Sub, find den sidste række på en anden måde ved hjælp af CurrentRegion.Rows.Count, og udskriv også dette — bekræft at de stemmer overens.
  3. Tilføj manuelt en sjette ordre til række 7 i arket, kør makroen igen, og bekræft at begge metoder nu rapporterer 7 uden nogen kodeændringer:
Tip
expand arrow

1. Find den sidste række med End(xlUp)

  • Start fra bunden af kolonne A og hop opad — samme mønster som i Kapitel 3's afsnit "Find den sidste række".
  • Brug Debug.Print for at vise resultatet i Immediate-vinduet (Ctrl+G).

2. Find den på en anden måde med CurrentRegion

  • CurrentRegion udvider sig fra en enkelt startcelle (prøv Range("A1")) til hele det sammenhængende blok.
  • .Rows.Count på det område inkluderer header-rækken — husk kapitlets note om at trække 1 fra, hvis du kun vil have datarækker. Da denne opgave blot beder dig sammenligne de to metoder, udskriv først det rå antal og overvej headeren bagefter.

3. Tilføj en sjette række og kør igen

  • Ingen kodeændringer nødvendige — indtast blot en ny ordre direkte i række 7 i regnearket, og kør derefter den samme 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 alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 2
some-alt