Kopier rækker fra originalt ark til nyt ark

En projektmappe indeholder som udgangspunkt et enkelt ark, her kaldet Ark1. Dette ark indeholder adskillige tusinde rækker om forskellige emner. Hver emne fylder 50 rækker, og hvis fx femte række i arket, således indeholder information om et bestemt spørgsmål i det første emne, vil række 55 indeholde information om det samme spørgsmål om det næste emne og så fremdeles. Der er altså ALTID 50 rækker pr. emne. Hver række kan indeholde mange kolonner, alle med kolonneoverskrifter i række 1.

Der ønskes nu en mulighed for at vælge en bestemt række som udgangspunkt. Nu skal denne og de følgende rækker med samme information (udgangsrækken + 50...) kopieres til et nyt ark, med samme navn som indholdet af C-kolonnen i den udpegede række. Rækkenummeret, der skal være udgangspunkt for makroens arbejde, indtastes via ven inputbox.

Først undersøges om det ark, der skal bruges, allerede eksisterer. Gør det ikke det, vil det blive oprettet og blive navngivet med indholdet af C-kolonnen i den relevante række. Når arket oprettes vil første række fra det oprindelige ark (kolonneoverskrifterne) blive kopieret over som kolonneoverskrifter i det nye ark. Der efter kopieres den relevante række og alle andre rækker med samme information (udgangsrækken + 50 + 50+ 50... osv.).

Sub Kopier()
    Dim MyRow As Single
    Dim MySheet As String

    Dim Exi As Boolean

    Application.ScreenUpdating = False

'Indtast relevant rækkenummer
    MyRow = InputBox("Indtast første række, der skal kopieres")
    MySheet = Sheets("Ark1").Range("C" & MyRow).Value

' Test om der er et ark til disse rækker, ellers tilføj det og indsæt overskrifter
    For Each sh In Worksheets
        If sh.Name = MySheet Then Exi = True: Exit For
    Next
    If Exi <> True Then
        Sheets.Add.Name = MySheet
        Sheets("Ark1").Select
        Rows(1).Copy
        Sheets(MySheet).Activate
        Selection.Insert Shift:=xlDown
    End If

' Kopier rækker fra "Ark1" til det ark, som identificeres ved navnet i c-kolonnen for de relevante rækker

    Do Until MyRow > 10000
        Sheets("Ark1").Select
        Rows(MyRow).Copy
        Sheets(MySheet).Activate
        ActiveSheet.Range("A1000000").End(xlUp).Offset(1, 0).Insert Shift:=xlDown
        MyRow = MyRow + 50
    Loop

    Application.ScreenUpdating = True

End Sub


I eksemplet hedder arket med de originale data Ark1, og det skal ændres i koden, hvis det skal hedde noget andet. Makroen er udarbejdet til Excel 2007 og nyere og vil give "Subscript out of range" fejl i ældre udgaver. Dette kan løses ved at rette ActiveSheet.Range("A1000000").Select til et tal omkring 32.000. Makroen er baseret på at der aldrig er mere end 10.000 rækker originale data, men er der det, kan Do Until MyRow > 10000 ændres til et relevant større tal.

- Tilbage til makroer -
- Tilbage til Excel -