Start » VBA-exempel för Excel | Effektiva lösningar på konkreta problem » VBA-lösningar på allehanda problem » Hitta kalkylbladets sista använda rad

Hitta kalkylbladets sista använda rad





sista-radenEn bra basfunktion att ha till hands vid makroprogrammering i Excel VBA är en rutin för att finna den sista använda raden i en kolumn.

Ofta behöver du veta vilken rad som är den sista i en matris för att på det sättet kunna göra något med detta cellområde, t ex applicera ett format, kopiera, lägga till en formel i kolumnen bredvid, med mycket mera.

I vissa fall kan man i och för sig låta sitt VBA-program använda sig av hela kolumnen, dvs ända ned till rad 65.536, men betänk då att vi slösar med kapacitet i onödan, vilket kan göra att körningen av makrot tar längre tid. Men i vissa andra fall så funkar inte ens detta, utan vi måste helt enkelt ha reda på den sista raden. Ett exempel kan vara ett makro som importerar data från en annan fil (med okänt antal rader) och sedan lägger ut en kolumnsumma längst ned i varje kolumn. I det fallet så måste vi helt enkelt ta reda på vilken som är den sist använda raden.

VBA-kod som återger den sista använda raden i en kolumn

Makrokoden nedan läser in den sist använda raden i kolumn A till en variabel:

intSistarad = Columns("A:A").Range("A65536").End(xlUp).Row

För att få fram den första “lediga” raden i kolumn A så måste vi öka upp värdet med 1:

intSistarad = intSistarad + 1

I mina egna VBA-program så använder jag mig av den här funktionen väldigt ofta, och det är en användbar rutin som är bra att ha tillhands.

Slutligen kan tilläggas att du även kan få fram den sista använda raden genom att loopa igenom kolumnens celler, ett tillvägagångssätt som kommer att ge samma resultat men som är mer resurskrävande samt kräver fler programmeringsrader än den enkla raden med kod som jag beskrivit ovan.





6 kommentarer till “Hitta kalkylbladets sista använda rad”

  1. Pär Johansson

    …Range(“A65536″)…
    Borde innebära att du letar bland de 65536 första raderna vilket ju var max antal rader t.o.m. Excel 2003 men nu är ju max antal rader betydligt större. Borde inte funktionen anpassas för att fungera med fler än 65536 rader? Kanske inte så vanligt att använde fler rader än så men dock inte helt unikt. Har själv passerat 800 000 rader vid något tillfälle….

    Dessutom letar väl funktionen bara i kolumn A?

  2. Sören Nilsson

    Jag tycker en snyggare lösning är: No_of_Rows = ActiveSheet.UsedRange.Rows.Count.
    På samma sätt kan man få reda på antalet kolumner mha: No_of_Cols = ActiveSheet.UsedRange.Columns.Count.
    Då behöver man inte ange några värden, utan systemet sköter jobbet.

  3. Excelkungen

    Tack Sören – en utmärkt lösning!

    /anders

  4. Tomas

    Bumbar ett otroligt gammalt svar. Jag hämtar data från en hemsida, och kör sedan ett macro där jag vill att ny data skall klistras in på första lediga rad.

    Jag tog Sörens lösning men stöter på problem. Även om jag raderar värden i cellen, ser Excel raden som använd.

    Någon ide? :)

  5. Excelkungen

    Tomas,

    Kanske kan du testa någon av följande två lösningar:

    (1) När du hämtar in data från en hemsida – klistra in som värde (Paste Value).

    (2) VBA-rutin som loopar nedifrån tills den finner innehåll i kolumn A:

    ‘- – - – - – - – - – - – - – -
    Sub AlternativSistaRaden()

    For i = 65536 To 1 Step -1
    If Cells(i, 1) <> “” Then
    r = i + 1
    Exit For
    End If
    Next i

    MsgBox r

    End Sub
    ‘- – - – - – - – - – - – - – -

    Om du använder Excel 2007/2010 så kan du byta till:
    ‘- – - – - – - – - – - – - – -
    For i = 1048576 To 1 Step -1
    ‘- – - – - – - – - – - – - – -

    Vidare så gör rutinen en check i A-kolumnen – det är det som är “1″ här:
    ‘- – - – - – - – - – - – - – -
    If Cells(i, 1) <> “” Then
    ‘- – - – - – - – - – - – - – -

    /Anders
    /ExcelKungen

  6. raman

    försöker sätta mig in i VBA, ovanstående formel.
    om jag önskar få resultatet utav antal rader i en specificerad cell, hur gör jag då?

Lämna en kommentar