Wanneer u met verschillende gegevensbronnen werkt, kan het vaak moeilijk zijn om meerdere werkmappen en werkbladen samen te stellen voordat u bij één laatste gegevensstuk komt. Stel je een situatie voor waarin je een paar honderd werkboeken moet combineren voordat je zelfs maar aan je dag kunt beginnen.

Niemand wil eindeloze uren besteden aan het werken aan verschillende bronnen, het openen van elke werkmap, het kopiëren en plakken van de gegevens van verschillende bladen, voordat hij uiteindelijk één geconsolideerde werkmap maakt. Wat als een VBA-macro dit voor u kan doen?

Met deze handleiding kunt u binnen enkele minuten uw eigen Excel VBA-macrocode maken om meerdere werkmappen te consolideren (als de gegevensbestanden veel zijn).

Vereisten voor het maken van uw eigen VBA-macrocode

U hebt één werkmap nodig om de VBA-code te huisvesten, terwijl de rest van de werkmappen met brongegevens gescheiden zijn. Maak bovendien één werkmap geconsolideerd om de geconsolideerde gegevens van al uw werkmappen op te slaan.

Een map maken consolidatie op de locatie van uw voorkeur om al uw bronwerkmappen op te slaan. Wanneer de macro wordt uitgevoerd, schakelt deze door elke werkmap die in deze map is opgeslagen, kopieert de inhoud van verschillende bladen en plaatst deze in de geconsolideerde werkmap.

Uw eigen Excel VBA-code maken

Zodra de vereisten uit de weg zijn, is het tijd om in de code te duiken en de basis te hacken om deze aan uw vereisten aan te passen.

Verwant: Geavanceerde Microsoft Excel-functies die u moet kennen

druk de Alt+F11 toets op Excel om de VBA-macrocode-editor te openen. Plak de onderstaande code en sla het bestand op als een werkmap met macro's (.xlsm verlenging).

Sub-openfiles()

'declareer de variabelen die in de VBA-code worden gebruikt'

Dim MyFolder As String, MyFile As String, wbmain As Workbook, lastrow As Long

'schakel deze functies uit om de codeverwerking te verbeteren'

Met toepassing
.DisplayAlerts = False
.ScreenUpdating = False
Eindigt met

'wijzig het pad van de map waarin uw bestanden worden opgeslagen'

MyFolder = InputBox ("Voer het pad van de consolidatiemap in") & "\"

'definieer de referentie van de map in een macrovariabele'

MijnBestand = Dir (MijnFolder)

'open een lus om door elke afzonderlijke werkmap te bladeren die in de map is opgeslagen'

Do While Len (MijnBestand) > 0

'activeer de consolidatie-werkmap'

Windows ("Consolidatie"). Activeren

'bereken de laatst ingevulde rij'

Bereik ("a1048576"). Selecteer
Selectie. Einde (xlUp).Selecteer
Actieve cel. Offset (1, 0).Selecteer

'open de eerste werkmap in de consolidatiemap'

Werkboeken. Open Bestandsnaam:=Mijn Map & MijnBestand

Windows (MijnBestand).Activeren

'schakel door elk blad in de werkmappen om de gegevens te kopiëren'

Dim ws als werkblad
Voor elke ws in bladen

ww. Activeren
ww. AutoFilterMode = False

'negeer de kop en kopieer de gegevens uit rij 2'
Als Cellen (2, 1) = "" Ga dan naar 1

Ga naar 10

1: Volgende

10: Bereik ("a2:az20000"). Kopiëren

Windows ("Consolidatie"). Activeren

'plak de gekopieerde inhoud'

ActiveBlad. Plakken

Windows (MijnBestand).Activeren

'sluit de geopende werkmap zodra de gegevens zijn geplakt'

Actief Werkboek. Dichtbij

'leeg de cache om de waarde van de volgende werkmap op te slaan'

MijnBestand = Dir()

'open het volgende bestand in de map'

Lus

'schakel de uitgeschakelde functies in voor toekomstig gebruik'

Met toepassing
.DisplayAlerts = True
.ScreenUpdating = True
Eindigt met

Einde sub

De VBA-code uitgelegd

Het eerste deel van de code is het definiëren van een subroutine, die al uw VBA-code bevat. Definieer de subroutine met sub, gevolgd door de naam van de code. De subnaam kan van alles zijn; idealiter zou je een naam moeten houden die relevant is voor de code die je gaat schrijven.

Verwant: Websites en blogs om Excel-tips en -trucs te leren

Excel VBA begrijpt door de gebruiker gemaakte variabelen en de bijbehorende gegevenstypen gedeclareerd met dimmen (dimensie).

Om de verwerkingssnelheid van uw code te verbeteren, kunt u het bijwerken van het scherm uitschakelen en alle waarschuwingen onderdrukken, omdat dit de uitvoering van de code vertraagt.

De gebruiker wordt gevraagd naar het pad van de map waar de gegevensbestanden zijn opgeslagen. Er wordt een lus gemaakt om elke werkmap die in de map is opgeslagen te openen, de gegevens van elk blad te kopiëren en toe te voegen aan de consolidatie werkboek.

De consolidatiewerkmap wordt geactiveerd zodat Excel VBA de laatst gevulde rij kan berekenen. De laatste cel in het werkblad is geselecteerd en de laatste rij wordt berekend in de werkmap met behulp van de offset-functie. Dit is erg handig wanneer de macro begint met het toevoegen van gegevens uit de bronbestanden.

Als de lus het eerste bronbestand opent, worden de filters van elk afzonderlijk blad verwijderd (als ze bestaan), en de gegevens van A2 tot AZ20000 worden gekopieerd en geplakt in de consolidatie werkboek.

Het proces wordt herhaald totdat alle werkmapbladen zijn toegevoegd aan de hoofdwerkmap.

Verwant: Beste online cursussen om geavanceerde Excel onder de knie te krijgen

Ten slotte wordt het bronbestand gesloten zodra alle gegevens zijn geplakt. De volgende werkmap wordt geopend zodat de VBA-macro dezelfde stappen kan herhalen voor de volgende set bestanden.

De lus is zo gecodeerd dat deze wordt uitgevoerd totdat alle bestanden automatisch zijn bijgewerkt in de hoofdwerkmap.

Op gebruikers gebaseerde aanpassingen

Soms wilt u zich geen zorgen maken over ingebouwde prompts, vooral niet als u de eindgebruiker bent. Als u liever het pad van de Consolidation-map in de code hardcodeert, kunt u dit deel van de code wijzigen:

MyFolder = InputBox ("Voer het pad van de consolidatiemap in") & "\"

Naar:

MyFolder = "Mappad" & "\"

Bovendien kunt u ook de kolomverwijzingen wijzigen, omdat de stap niet in deze code is opgenomen. Vervang gewoon de eindkolomverwijzing door uw laatst ingevulde kolomwaarde (AZ, in dit geval). U moet onthouden dat de laatst gevulde rij wordt berekend via de macrocode, dus u hoeft alleen de kolomverwijzing te wijzigen.

Om het meeste uit deze macro te halen, kunt u deze alleen gebruiken om werkmappen in dezelfde indeling te consolideren. Als de structuren anders zijn, kunt u deze VBA-macro niet gebruiken.

Meerdere werkmappen consolideren met Excel VBA-macro

Het maken en wijzigen van een Excel VBA-code is relatief eenvoudig, vooral als u enkele nuances in de code begrijpt. VBA loopt systematisch door elke coderegel en voert deze regel voor regel uit.

Als u wijzigingen aanbrengt in de code, moet u ervoor zorgen dat u de volgorde van de codes niet wijzigt, omdat dit de uitvoering van de code verstoort.

5 coole Microsoft Excel-macro's voor het sorteren van gegevens

Maak gegevensbeheer een fluitje van een cent met deze Excel-macro's.

Lees volgende

DeelTweetenE-mail
Gerelateerde onderwerpen
  • Programmeren
  • Programmeren
  • Microsoft Excel
Over de auteur
Gaurav Siyal (19 artikelen gepubliceerd)

Gaurav Siyal heeft twee jaar schrijfervaring en schreef voor een reeks digitale marketingbedrijven en documenten over de levenscyclus van software.

Meer van Gaurav Siyal

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren