VBA WORD LID

Vergelijkbaar met wat we in het werkblad hebben als Concatenate-functie en de & -opdracht die wordt gebruikt om twee of meer dan twee strings samen te voegen, gebruiken we in VBA de opdracht Join om dit te doen, in Join in VBA nemen we de bron van de gegevens in een array en vergelijkbaar met de aaneenschakeling gebruiken we een scheidingsteken om ze samen te voegen.

Excel VBA JOIN-functie

Zoals de naam zelf suggereert, wordt de VBA JOIN-functie gebruikt om een ​​reeks subtekenreeksen samen te voegen met het opgegeven scheidingsteken. Als we geen scheidingsteken specificeren, neemt het 'spatie' in als een standaard scheidingsteken. Het doet hetzelfde werk als de functie Concatenate doet in Excel, behalve dat we het scheidingsteken maar één keer hoeven op te geven, terwijl we in de functie Concatenate elke keer een scheidingsteken tussen elke twee strings moeten opgeven.

De syntaxis van de functie is

Zoals we kunnen zien, heeft de functie twee argumenten en retourneert een string. Argumenten zijn:

  1. SourceArray : we moeten een reeks subtekenreeksen die moeten worden samengevoegd, specificeren of ernaar verwijzen.
  2. Scheidingsteken : het scheidingsteken wordt gebruikt om elk van de subtekenreeksen te scheiden bij het maken van de resulterende tekenreeks. Aangezien dit een optioneel argument is, wordt het scheidingsteken ingesteld op een spatie "" als we het weglaten.

De VBA SPLIT-functie is een exact tegenovergestelde functie van de VBA JOIN-functie.

Voorbeelden van VBA Join-functie

Hieronder staan ​​de voorbeelden van de join-functie in Excel VBA.

U kunt deze VBA Join Function Excel-sjabloon hier downloaden - VBA Join Function Excel-sjabloon

VBA Join - Voorbeeld # 1

Stel dat we ons bij de eerste (Ramesh), middelste (Kumar) en achternaam (Mishra) willen voegen.

Stappen zouden zijn:

  • Eerst moeten we de visuele basiseditor openen. We kunnen hetzelfde doen door te klikken op de opdracht 'Visual Basic' in de groep 'Code' onder het tabblad 'Ontwikkelaar' excel of we kunnen de Excel-sneltoets Alt + F11 gebruiken .

  • Voeg de module in door met de rechtermuisknop op een "blad 1" te klikken en de opdracht 'Invoegen' te kiezen in het contextmenu en vervolgens 'Module' te kiezen om in te voegen.

  • Maak een subroutine met de naam 'JoiningName'.

Code:

 Sub JoiningName () End Sub 

  • Gebruik de JOIN-functie als volgt

Code:

 Sub JoiningName () Bereik ("D2"). Waarde = Join (Array ("Ramesh", "Kumar", "Mishra")) End Sub 

We kunnen zien dat we de ARRAY-functie hebben gebruikt om SourceArray aan de JOIN-functie te leveren en hebben overgeslagen om het scheidingsteken op te geven, zodat 'spatie' het standaardteken zou zijn. De verwerkte waarde van de JOIN-functie wordt in cel D2 geschreven wanneer we deze code uitvoeren met de F5-toets of handmatig.

VBA Join - Voorbeeld # 2

Stel dat we verschillende Excel-bestanden willen maken waarbij de artikelnaam alleen de verkoop voor dat artikel bevat.

  • Open de Visual Basic Editor met de sneltoets Alt + F11.
  • Klik met de rechtermuisknop op het blad 'Blad1 ′ (Voorbeeld 2)' om het contextmenu te openen en klik op 'Invoegen' om een ​​VBA 'Module' in het VBA-project in te voegen.

  • Definieer een subroutine met de naam 'CreateItemSoldFiles'.

Code:

 Sub CreateItemSoldFiles () End Sub 

  • We moeten een verwijzing naar de 'Microsoft Scripting Runtime'-objectbibliotheek instellen met behulp van het menu Extra -> Verwijzingen…, omdat we een code (objecten) zullen gebruiken, die niet werken als we deze objectbibliotheek niet opnemen.

  • Nu zullen we alle variabelen declareren.

Code:

 Dim FSO als nieuwe Scripting.FileSystemObject

De bovenstaande FSO-variabele geeft toegang tot het VBA FileSystemObject. Na het binden kunnen we functies gebruiken zoals BuildPath, CopyFile, CreateTextFile, etc.

  • De volgende instructie maakt een TextStream-object. Via het TextStream-object kunnen we lezen uit of toevoegen aan het originele bestand.

Code:

 Dim FSO als nieuw Scripting.FileSystemObject Dim ts As Scripting.TextStream

  • We zullen meer variabelen declareren. 'r' is voor het vasthouden van rijen in het bereik, 'fs' voor het opslaan van de laatste samengevoegde string, 'cols' voor het opslaan van aantallen kolommen in het bereik, 'FolPath' voor het opslaan van het pad van de map zodat we de bestanden kunnen opslaan in de map en 'Items_Sold' voor het opslaan van verschillende itemnamen om een ​​bestand met deze namen te maken.

Code:

 Dim r As Range Dim fs As String Dim cols As Integer Dim FolPath As String Dim Items_Sold As String 

  • Om het totale aantal kolommen binnen bereik te tellen, zullen we de volgende verklaring definiëren.

Code:

cols = Bereik ("A1"). CurrentRegion.Columns.Count

Deze instructie selecteert eerst het huidige gebied voor cel A1 en telt vervolgens het totale aantal kolommen in het huidige gebied.

  • We zullen de volgende instructies schrijven voor het toewijzen van de variabele 'FolPath' aan een pad met behulp van de VBA ENVIRON-functie en de Concatenation Operator.

Code:

FolPath = Environ ("UserProfile") & "\ Desktop \ Items_Sold" Indien niet FSO.FolderExists (FolPath) Dan FSO.CreateFolder FolPath

De tweede instructie maakt de map aan als de map niet op dezelfde locatie bestaat.

  • Deze code wijst de waarden van kolom B één voor één toe aan 'Items_Sold'. We hebben de 'OFFSET-functie' gebruikt om de referentie van cel in kolom B te krijgen, aangezien de momenteel geselecteerde cel zich in kolom A bevindt.

Code:

Items_Sold = r.Offset (0, 1) .Value

  • De volgende omrande instructie opent de bestanden met namen die zijn opgeslagen in de variabele 'Items_Sold' één voor één in de toevoegmodus (de nieuwe waarden worden als laatste toegevoegd).

Code:

 Set ts = FSO.OpenTextFile(FolPath & "\" & Items_Sold & ".xls", ForAppending, True )

We have used Concatenate operator with variables ‘FolPath’ and ‘Items_Sold’ and static values (“\” and”.xls”) to create file names for excel files.

  • We need to keep in mind that VBA JOIN function takes an only one-dimensional array as SourceArray To convert the rows into a one-dimensional array, we need to use Application.Transpose method two times.

Code:

fs = Join(Application.Transpose(Application.Transpose(r.Resize(1, cols).Value)), vbTab)

We have used the Resize method of range object to resize the range to the width of a number of columns in the range.

As delimiter, we have used ‘vbTab’ keyword so that values would be filled in different cells.

  • As we have stored the processed value of JOIN function into ‘fs’ variable, we will write the fs’s values into new lines of VBA created excel files for every row in our original file from row number 2 to the last row (in our case it is 350th row).

  • Before ending the loop, we will close the file opened. The code would be as shown in the screenshot.

We have written the full code now.

Code:

 Sub CreateItemSoldFiles() Dim FSO As New Scripting.FileSystemObject Dim ts As Scripting.TextStream Dim r As Range Dim fs As String Dim cols As Integer Dim FolPath As String Dim Items_Sold As String cols = Range("A1").CurrentRegion.Columns.Count FolPath = Environ("UserProfile") & "\Desktop\Items_Sold" If Not FSO.FolderExists(FolPath) Then FSO.CreateFolder FolPath For Each r In Range("A2", Range("A1").End(xlDown)) Items_Sold = r.Offset(0, 1).Value Set ts = FSO.OpenTextFile(FolPath & "\" & Items_Sold & ".xls", ForAppending, True ) fs = Join(Application.Transpose(Application.Transpose(r.Resize(1, cols).Value)), vbTab) ts.WriteLine fs ts.Close Next r End Sub 

Now to execute the code, we will press F5 then, we can see that a folder named ‘Items_Sold’ has been created with the help of VBA code on the desktop.

In the folder, there are 7 unique files created with the names of the item and we can find out details about only that particular item in files.

Laptop.xls

Things to Remember About VBA JOIN Function

  • The SourceArray must be a one-dimensional array. We cannot refer to an individual cell, as this will create multiple multi-dimensional arrays.
  • If we specify a zero-length string (“”) as a delimiter, all items in the array are concatenated with no delimiters.