Gegevens samenvoegen met VBA

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 de Exceltips of bij ExcelStudie. ExcelStudie is gelieerd aan deze site.

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