REJOINDRE VBA

Semblable à ce que nous avons dans la feuille de calcul en tant que fonction Concaténer et la commande & qui est utilisée pour joindre deux ou plus de deux chaînes ensemble, dans VBA, nous utilisons la commande Join pour le faire, dans Join in VBA, nous prenons la source des données dans un tableau et similaire à la concaténation, nous utilisons un délimiteur pour les joindre.

Fonction Excel VBA JOIN

Comme son nom l'indique, la fonction VBA JOIN est utilisée pour joindre un tableau de sous-chaînes avec le délimiteur spécifié. Si nous ne spécifions aucun délimiteur, alors il prend «espace» comme caractère de délimitation par défaut. Elle fait le même travail que la fonction de concaténation dans Excel, sauf que nous devons spécifier le caractère de délimitation une seule fois alors que, dans la fonction de concaténation, nous devons spécifier le caractère de délimitation à chaque fois entre toutes les deux chaînes.

La syntaxe de la fonction est

Comme nous pouvons le voir, la fonction prend deux arguments et renvoie une chaîne. Les arguments sont:

  1. SourceArray : nous devons spécifier ou donner une référence à un tableau de sous-chaînes à joindre.
  2. Délimiteur : Le délimiteur est utilisé pour séparer chacune des sous-chaînes lors de la création de la chaîne résultante. Comme il s'agit d'un argument facultatif, si nous l'omettons, le délimiteur est défini comme un espace "".

La fonction VBA SPLIT est une fonction exactement opposée à la fonction VBA JOIN.

Exemples de fonction de jointure VBA

Vous trouverez ci-dessous des exemples de fonction de jointure dans Excel VBA.

Vous pouvez télécharger ce modèle Excel de fonction de jointure VBA ici - Modèle Excel de fonction de jointure VBA

Joindre VBA - Exemple # 1

Supposons que nous voulions joindre le premier (Ramesh), le deuxième (Kumar) et le nom de famille (Mishra).

Les étapes seraient:

  • Tout d'abord, nous devons ouvrir l'éditeur Visual Basic. Nous pouvons faire de même en cliquant sur la commande 'Visual Basic' dans le groupe 'Code' sous l'onglet 'Développeur' excel ou nous pouvons utiliser la touche de raccourci Excel Alt + F11 .

  • Insérez le module en faisant un clic droit sur une «feuille 1» et en choisissant la commande «Insérer» dans le menu contextuel, puis choisissez «Module» à insérer.

  • Créez un sous-programme nommé 'JoiningName'.

Code:

 Sub JoiningName () End Sub 

  • Utilisez la fonction JOIN comme suit

Code:

 Sub JoiningName () Range ("D2"). Value = Join (Array ("Ramesh", "Kumar", "Mishra")) End Sub 

Nous pouvons voir que nous avons utilisé la fonction ARRAY pour fournir SourceArray à la fonction JOIN et ignoré pour spécifier le caractère de délimitation afin que «espace» soit le caractère par défaut. La valeur traitée de la fonction JOIN sera écrite dans la cellule D2 lorsque nous exécutons ce code à l'aide de la touche F5 ou manuellement.

Joindre VBA - Exemple # 2

Supposons que nous souhaitons créer divers fichiers Excel avec le nom de l'article contenant les ventes uniquement pour cet article.

  • Ouvrez Visual Basic Editor à l'aide de la touche de raccourci Alt + F11.
  • Faites un clic droit sur la feuille 'Sheet1' (Exemple 2) 'pour ouvrir le menu contextuel et cliquez sur' Insert 'pour insérer un' Module 'VBA dans le projet VBA.

  • Définissez un sous-programme nommé 'CreateItemSoldFiles'.

Code:

 Sub CreateItemSoldFiles () End Sub 

  • Nous devons définir une référence à la bibliothèque d'objets 'Microsoft Scripting Runtime' en utilisant le menu Outils -> Références… commande, car nous utiliserons du code (objets), qui ne fonctionneront pas si nous n'incluons pas cette bibliothèque d'objets.

  • Nous allons maintenant déclarer toutes les variables.

Code:

 Dim FSO comme nouveau scripting.FileSystemObject

La variable FSO ci-dessus donne accès à VBA FileSystemObject. Après la liaison, nous pouvons utiliser des fonctions telles que BuildPath, CopyFile, CreateTextFile, etc.

  • L'instruction suivante crée un objet TextStream. Grâce à l'objet TextStream, nous pouvons lire ou ajouter au fichier d'origine.

Code:

 Dim FSO comme nouveau scripting.FileSystemObject Dim ts comme scripting.TextStream

  • Nous déclarerons plus de variables. 'r' est pour contenir les lignes dans la plage, 'fs' est pour stocker la chaîne finale jointe, 'cols' pour stocker le nombre de colonnes dans la plage, 'FolPath' pour stocker le chemin du dossier afin que nous puissions enregistrer les fichiers dans le dossier et 'Items_Sold' pour stocker divers noms d'éléments pour créer un fichier avec ces noms.

Code:

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

  • Pour compter le nombre total de colonnes dans la plage, nous définirons l'instruction suivante.

Code:

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

Cette instruction sélectionnera d'abord la région actuelle pour la cellule A1, puis comptera le nombre total de colonnes dans la région actuelle.

  • Nous écrirons les instructions suivantes pour attribuer à la variable 'FolPath' un chemin à l'aide de la fonction VBA ENVIRON et de l'opérateur de concaténation.

Code:

FolPath = Environ ("UserProfile") & "\ Desktop \ Items_Sold" Sinon FSO.FolderExists (FolPath) Then FSO.CreateFolder FolPath

La deuxième instruction créera le dossier si le dossier n'existe pas au même emplacement.

  • Ce code attribuera les valeurs de la colonne B une par une à 'Items_Sold' Nous avons utilisé la 'fonction OFFSET' pour obtenir la référence de la cellule dans la colonne B car la cellule actuellement sélectionnée est dans la colonne A.

Code:

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

  • L'instruction bordée suivante ouvrira les fichiers avec les noms stockés dans la variable 'Items_Sold' un par un en mode ajout (les nouvelles valeurs seront ajoutées enfin).

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.