05. september 2013 - 15:48Der er
13 kommentarer og 1 løsning
Samle flere tabeller til én tabel
Hej
Kan man på en nem måde samle data fra tabeller i flere ark til én samlet tabel i et andet ark? Alle tabeller har samme kolonner og kolonne-overskrifter.
Opret et nyt ark - kald det "Samling" (er anvendt i koden) - kopier nedenstående VBA-kode ind under dette ark. Start koden med Alt+F8 / marker SamlingAfArk / Afspil makro
Dim antalArk As Integer, antalRæk As Integer, antalKol As Integer, arkNavn As String
Dim rækNr As Integer, arkNr As Integer, r1 As Range, a1 As Worksheet, startRæk As Integer
Public Sub samlingAfArk() arkNr = 0 rækNr = 1
For Each ark In ActiveWorkbook.Sheets If ark.Name <> samleArkNavn Then ark.Activate antalRæk = ActiveCell.SpecialCells(xlLastCell).Row antalKol = ActiveCell.SpecialCells(xlLastCell).Column arkNavn = ark.Name
Set a1 = ActiveWorkbook.ActiveSheet
If arkNr = 0 Then startRæk = 1 Else startRæk = 2 End If
Set r1 = a1.Range(a1.Cells(startRæk, 1), a1.Cells(antalRæk, antalKol))
r1.Copy Destination:=Worksheets(samleArkNavn).Range("A" & rækNr) rækNr = rækNr + antalRæk arkNr = arkNr + 1 End If Next End Sub
Synes godt om
Slettet bruger
06. september 2013 - 08:42#5
Det virker et stykke hen ad vejen. Der kommer en boks på skærmen med beskeden "Overflow" og så går den i stå inden alle ark er overført.
I samle-arket kommer der en blank linje efter hver kopieret ark. Det er selvfølgelig ret nemt at fjerne efterfølgende, men nemmere hvis det ikke skete.
Kan man slutte af med at give den nye samle-tabel et navn?
Nu testes der på om sidste række er blank i kolonne A Endvidere udskrives rækkenummer på samlearket løbende i statuslinjen nederst til venstre.
Rem Version 2 Const samleArkNavn = "Samling" '<---- evt. justeres
Dim antalArk As Integer, antalRæk As Integer, antalKol As Integer, arkNavn As String
Dim rækNr As Integer, arkNr As Integer, r1 As Range, a1 As Worksheet, startRæk As Integer Public Sub samlingAfArk() arkNr = 0 rækNr = 1
For Each ark In ActiveWorkbook.Sheets If ark.Name <> samleArkNavn Then ark.Activate antalRæk = ActiveCell.SpecialCells(xlLastCell).Row antalKol = ActiveCell.SpecialCells(xlLastCell).Column arkNavn = ark.Name
Set a1 = ActiveWorkbook.ActiveSheet
If arkNr = 0 Then startRæk = 1 Else startRæk = 2 End If
Rem test om sidste række er blank If a1.Range("A" & antalRæk) = "" Then antalRæk = antalRæk - 1 End If
Set r1 = a1.Range(a1.Cells(startRæk, 1), a1.Cells(antalRæk, antalKol))
Har nu korrigeret datatyper vedr. rækkenr - det kan meget vel være det, der er skyld i overflow.
Rem Version 3 Const samleArkNavn = "Samling" '<---- evt. justeres
Dim antalArk As Integer, antalRæk As Long, antalKol As Integer, arkNavn As String
Dim rækNr As Long, arkNr As Integer, r1 As Range, a1 As Worksheet, startRæk As Integer Public Sub samlingAfArk() arkNr = 0 rækNr = 1
For Each ark In ActiveWorkbook.Sheets If ark.Name <> samleArkNavn Then ark.Activate antalRæk = ActiveCell.SpecialCells(xlLastCell).Row antalKol = ActiveCell.SpecialCells(xlLastCell).Column arkNavn = ark.Name
Set a1 = ActiveWorkbook.ActiveSheet
If arkNr = 0 Then startRæk = 1 Else startRæk = 2 End If
Rem test om sidste række er blank If a1.Range("A" & antalRæk) = "" Then antalRæk = antalRæk - 1 End If
Set r1 = a1.Range(a1.Cells(startRæk, 1), a1.Cells(antalRæk, antalKol))
Nu kommer alle linjer med over i samle-arket, så problemet med overflow er løst. Den tomme linje bliver stadig dannet hver gang der er blevet kopieret et dataområde.
(beklager i øvrigt at jeg ikke har svaret noget før - jeg blev sat på en anden opgaven i en periode)
Rem Version 4 Const samleArkNavn = "Samling" '<---- evt. justeres
Dim antalArk As Integer, antalRæk As Long, antalKol As Integer, arkNavn As String
Dim rækNr As Long, arkNr As Integer, r1 As Range, a1 As Worksheet, startRæk As Integer Public Sub samlingAfArk() arkNr = 0 rækNr = 1
For Each ark In ActiveWorkbook.Sheets If ark.Name <> samleArkNavn Then ark.Activate antalRæk = ActiveCell.SpecialCells(xlLastCell).Row antalKol = ActiveCell.SpecialCells(xlLastCell).Column arkNavn = ark.Name
Set a1 = ActiveWorkbook.ActiveSheet
If arkNr = 0 Then startRæk = 1 Else startRæk = 2 End If
Rem test om sidste række er blank If Trim(a1.Range("A" & antalRæk)) = "" Then antalRæk = antalRæk - 1 End If
Set r1 = a1.Range(a1.Cells(startRæk, 1), a1.Cells(antalRæk, antalKol))
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.