Het komt vaak voor dat er gegevens uit meerdere Excelbestanden opgehaald en samengevoegd moeten worden. Dat kan eventueel met ingebouwde Excelfuncties zoals [Verticaal Zoeken] en [Indirect]. Maar dat werkt zolang de bestanden niet al te groot zijn en de kans op wijzigingen in de structuur van één of beide bestanden nihil is. Bovendien is de integriteit van het spreadsheet niet gewaarborgd. In spreadsheets worden vaak formules handmatig overschreven, zonder dat dat vastgelegd wordt. Een ander probleem met het toepassen van formules is dat ze nogal veel geheugenruimte verbruiken. Vooral bij grote spreadsheets.
Oplossing met VBA
In dit geval biedt VBA een slimme oplossing. Met VBA worden de oude gegevens weg gehaald en overschreven met de nieuwe gegevens. Er is minder geheugenruimte nodig en de integriteit is gewaarborgd. Ook als de structuur van één of beide bestanden wijzigt.
Hieronder wordt een voorbeeld uitgewerkt met het samenvoegen van gegevens uit twee bestanden.
Samenvoegen van gegevens met VBA
Met het VBA script onder aan dit artikel worden er gegevens uit twee bestanden [Dames PersoneelB] en [Heren PersoneelB] opgehaald en samengevoegd in één bestand [Dames en Heren PersoneelB].
Het VBA script staat onderaan dit artikel. Deze code wordt geplaatst in het Excelbestand [Dames en Heren PersoneelB]. Sla deze daarna dan wel op als [*.XLSM[. In de volgende werkinstructie wordt uitgelegd hoe de code in het Excelbestand wordt geplaatst.
Regels met een apostrof (‘) ervoor zijn als uitleg bedoelt in het script. Door gebruik van de apostrof negeert VBA dit als code.
Download hier de drie Excelbestanden
Meer Exceltips en trucs
Wil je meer weten over de mogelijkheden met Excel kijk dan bij het Excelblog.
Boekentips
Wil je meer weten over VBA?
Hopelijk vond je dit een nuttig artikel. Als je vragen of opmerkingen hebt stuur dan een e-mail.
Veel succes!
(c) 2019 ExcelFactory
VBA script
Kopieer onderstaande code vanaf [Sub…] tot en met [End Sub]
Sub HuiswerkDamesEnHerenSamenvoegenFINAL()
Application.ScreenUpdating = False
Dim a As Integer
Dim n As String
Dim o As String
Dim p As String
Dim Q As Integer
Dim R As Integer
Dim S As Integer
Dim T As Integer
Dim U As Integer
Dim V As Integer
‘Haal data op uit Dames personeelB’
‘Open Workbook’
Workbooks(“Dames en Heren PersoneelB.xlsm”).Activate
n = Range(“A2”).Value
o = Range(“B2”).Value
p = Range(“C2”).Value
Cells.Find(n).Select
Q = ActiveCell.Column
Cells.Find(o).Select
R = ActiveCell.Column
Cells.Find(p).Select
S = ActiveCell.Column
yyy = Rows.Count
xxx = Cells(yyy, 2).End(xlUp).Row
ActiveSheet.Cells(xxx + 1, 1).Select
Workbooks(“Dames PersoneelB.xlsx”).Activate
y = Rows.Count
x = Cells(y, 2).End(xlUp).Row
For i = 1 To x – 2 Step 1
Workbooks(“Dames PersoneelB.xlsx”).Activate
Range(“A3”).Select
n = ActiveCell(i, Q).Value
o = ActiveCell(i, R).Value
p = ActiveCell(i, S).Value
Workbooks(“Dames en Heren PersoneelB.xlsm”).Activate
‘ActiveCell.Offset(j, 0).Select’
ActiveCell(1, 1) = n
ActiveCell(1, 2) = o
ActiveCell(1, 3) = p
ActiveCell.Offset(1, 0).Select
Next
Workbooks(“Heren PersoneelB.xlsx”).Activate
y = Rows.Count
x = Cells(y, 2).End(xlUp).Row
For i = 1 To x – 2 Step 1
Workbooks(“Heren PersoneelB.xlsx”).Activate
Range(“A3”).Select
n = ActiveCell(i, Q).Value
o = ActiveCell(i, R).Value
p = ActiveCell(i, S).Value
Workbooks(“Dames en Heren PersoneelB.xlsm”).Activate
‘ActiveCell.Offset(j, 0).Select’
ActiveCell(1, 1) = n
ActiveCell(1, 2) = o
ActiveCell(1, 3) = p
ActiveCell.Offset(1, 0).Select
Next
Application.ScreenUpdating = True
End Sub
