• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

3 werkbladen samenvoegen

Status
Niet open voor verdere reacties.

Fenadna

Gebruiker
Lid geworden
23 jun 2008
Berichten
48
Ik heb 3 werkbladen met dezelfde indeling in kolommen. Nu wil ik de gegevens uit deze 3 bladen in 1 werkblad zetten, gewoon onder elkaar. Bij opnieuw inlezen van de gegevens fluctueert het aantal rijen per werkblad. Weet iemand ik dat voor elkaar moet krijgen?
 
Lastig zonder voorbeeld,
maar zo zou het kunnen.

Code:
Sub test()
For Each sh In ThisWorkbook.Sheets
If Not sh.Name = "Blad1" Then
sh.Range("A1").CurrentRegion.Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
End If
Next
End Sub

Niels
 
Waar kan ik deze tekst plaatsen? Ik heb nooit met VBA gewerkt.
 
Alt-f11
rechtermuisknop links in beeld op de naam van het excelstand => invoegen => module
en daar zet je hem in.
Met f5 voer je hem uit.

Niels
 
Ik krijg de foutmelding dat het subscript buiten het bereik valt. Moet ik "blad 1" nog een andere naam geven?
 
Blad1 moet je vervangen door de naam van het tabblad waarop je de gegevens wilt samenvoegen.

Niels
 
er staan nog meer tabbladen in het bestand, is dat nog een probleem?
 
Zoals ik al aangaf in mijn eerste post een voorbeeld bestandje is wel makkelijk.

Code:
Sub test()
Sheets("blad2").Range("A1").CurrentRegion.Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
Sheets("blad3").Range("A1").CurrentRegion.Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
Sheets("blad4").Range("A1").CurrentRegion.Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
End Sub

blad1 -blad2 - blad3 - en blad4 moet je jouw namen geven

Niels
 
Het werkt! Super! Nog 2 problemen:
- de eerste regel met de kolomnamen komt in rij 2 ipv rij 1.
- 1 kolom van de 3 samengevoegde tabbladen bevat een formule die de waarde nul geeft als de kolom ernaast leeg is, maar in het samengevoegde tabblad krijg ik daardoor lege regels waar deze formule staat. In de draaitabel die ik van dit tabblad maakt stopt bij de lege regels.

Is aan bovenstaande nog iets te doen?
 
bereiken en bladnamen zelf aanpassen

Code:
Sub test()
Sheets("blad2").Range("A2:B" & Sheets("blad2").Cells(Rows.Count, "A").End(xlUp).Row).Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
Sheets("blad3").Range("A2:B" & Sheets("blad3").Cells(Rows.Count, "A").End(xlUp).Row).Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
Sheets("blad4").Range("A2:B" & Sheets("blad4").Cells(Rows.Count, "A").End(xlUp).Row).Copy Destination:=Sheets("blad1").Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1)
End Sub

voor formuleprobleem nogmaals een voorbeeld bestandje zo wel makkelijk zijn, je komt steeds met nieuwe info.

Niels
 
Het bestand is 23MB en er staan gegevens in die ik liever niet op internet zet.

Het probleem met de oplossing die je voorstelt is dat hierdoor het bereik niet meer variabel is, wanneer ik nieuwe gegevens inlees in de 3 tabbladen kan het aantal rijen veranderen.
 
Het bereik is wel variabel in het aantal rijen.
Er staat range("A2:B" & laatse ingevulde rij)

ik hoef ook niet heel je bestand te zien maar alleen een voorbeeld bestand met de 4 tabbladen waar het over gaat met fictieve waarde die overeenkomen met de originele waarde.
Dus de formule ed.

Als je de formule niet mee wilt kopieren maar alleen de waardes kan het zo:

Code:
Sub test()
With Sheets("blad1")
    With Sheets("blad2")
        .Range("A2:B" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy
    End With
    .Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1).PasteSpecial (xlValues)
    With Sheets("blad3")
        .Range("A2:B" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy
    End With
    .Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1).PasteSpecial (xlValues)
    With Sheets("blad4")
        .Range("A2:B" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy
    End With
    .Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1).PasteSpecial (xlValues)
End With
Application.CutCopyMode = False
End Sub


Niels
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan