Rejoindre VBA - Exemples étape par étape de la fonction de jointure Excel VBA

Table des matières

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 Concaténer dans Excel, sauf que nous devons spécifier le caractère délimiteur une seule fois alors que, dans la fonction Concaténer, nous devons spécifier le caractère délimiteur à 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.

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 en choisissant «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 As New Scripting.FileSystemObject Dim ts As Scripting.TextStream
  • We will declare more variables. ‘r’ is for holding rows in the range, ‘fs’ is for storing final joined string, ‘cols’ for storing numbers of columns in the range, ‘FolPath’ for storing the path of the folder so that we can save the files in the folder and ‘Items_Sold’ for storing various item names to create a file with these names.

Code:

Dim r As Range Dim fs As String Dim cols As Integer Dim FolPath As String Dim Items_Sold As String
  • To count the total number of columns in range, we will define the following statement.

Code:

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

This statement will first select the current region for cell A1 and then will count the total number of columns in the current region.

  • We will write the following statements for assigning the variable ‘FolPath’ a path using VBA ENVIRON function and Concatenation Operator.

Code:

FolPath = Environ("UserProfile") & "DesktopItems_Sold" If Not FSO.FolderExists(FolPath) Then FSO.CreateFolder FolPath

The second statement will create the folder if the folder does not exist in the same location.

  • This code will assign the values of B column one by one to ‘Items_Sold’ We have used ‘OFFSET function’ to get the reference of cell in B column as the currently selected cell is in column A.

Code:

Items_Sold = r.Offset(0, 1).Value
  • The following bordered statement will open the files with names stored in ‘Items_Sold’ variable in one by one in appending mode (the new values will be appended at last).

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") & "DesktopItems_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

Maintenant, pour exécuter le code, nous allons appuyer sur F5 puis, nous pouvons voir qu'un dossier nommé 'Items_Sold' a été créé à l'aide du code VBA sur le bureau.

Dans le dossier, il y a 7 fichiers uniques créés avec les noms de l'élément et nous ne pouvons trouver des détails que sur cet élément particulier dans les fichiers.

Laptop.xls

Points à retenir à propos de la fonction VBA JOIN

  • Le SourceArray doit être un tableau unidimensionnel. Nous ne pouvons pas faire référence à une cellule individuelle, car cela créera plusieurs tableaux multidimensionnels.
  • Si nous spécifions une chaîne de longueur nulle («») comme délimiteur, tous les éléments du tableau sont concaténés sans délimiteurs.

Articles intéressants...