VBA Gå med - Steg-för-steg-exempel på Excel VBA-anslutningsfunktion

Innehållsförteckning

Liknar vad vi har i kalkylbladet som Sammankopplingsfunktion och kommandot & som används för att sammanfoga två eller fler än två strängar tillsammans, i VBA använder vi Kommandot Gå för att göra det, i Gå med i VBA tar vi källan till data i en matris och liknar sammankopplingen använder vi en avgränsare för att gå med i dem.

Excel VBA JOIN-funktion

Som namnet själv antyder används VBA JOIN-funktionen för att sammanfoga en matris av underlag med den angivna avgränsaren. Om vi ​​inte anger någon avgränsare tar det "mellanslag" som ett standardavgränsningstecken. Det fungerar på samma sätt som funktionen Sammankoppling gör i Excel förutom att vi måste ange avgränsningstecken en gång, medan vi i Sammankopplingsfunktionen måste ange avgränsningstecken varje gång mellan varannan sträng.

Funktionens syntax är

Som vi kan se tar funktionen två argument och returnerar en sträng. Argument är:

  1. SourceArray : Vi måste ange eller hänvisa till en matris av underlag som ska sammanfogas.
  2. Avgränsare : Avgränsaren används för att separera var och en av understrängarna när den resulterande strängen skapas. Eftersom detta är ett valfritt argument, om vi utelämnar det, är avgränsaren inställd på att vara ett mellanslag "".

VBA SPLIT-funktionen är en exakt motsatt funktion av VBA JOIN-funktionen.

Exempel på VBA-anslutningsfunktion

Nedan följer exemplen på anslutningsfunktion i Excel VBA.

VBA Join - Exempel nr 1

Antag att vi vill gå med i förnamnet (Ramesh), mitten (Kumar) och efternamnet (Mishra).

Stegen skulle vara:

  • Först måste vi öppna den visuella grundredigeraren. Vi kan göra detsamma genom att klicka på 'Visual Basic' kommandot i gruppen 'Kod' under fliken 'Utvecklare' excel eller så kan vi använda excel-genvägen Alt + F11 .
  • Sätt in modulen genom att högerklicka på ett "ark 1" och välja "Infoga" -kommandot från snabbmenyn och välj sedan "Modul" för att infoga.
  • Skapa en underrutin med namnet 'JoiningName'.

Koda:

Sub JoiningName () Avsluta Sub
  • Använd JOIN-funktionen enligt följande

Koda:

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

Vi kan se att vi har använt ARRAY-funktionen för att tillhandahålla SourceArray till JOIN-funktionen och hoppat över för att ange avgränsningstecken så 'space' skulle vara standardtecken. Det bearbetade värdet för JOIN-funktionen kommer att skrivas i cell D2 när vi kör den här koden med F5-tangenten eller manuellt.

VBA Join - Exempel # 2

Antag att vi vill skapa olika excel-filer med artikelnamnet som endast innehåller försäljning för den artikeln.

  • Öppna Visual Basic Editor med kortkommandot Alt + F11.
  • Högerklicka på 'Sheet1' (Exempel 2) för att öppna snabbmenyn och klicka på 'Insert' för att infoga en VBA-modul i VBA-projektet.
  • Definiera en underrutin med namnet 'CreateItemSoldFiles'.

Koda:

Sub CreateItemSoldFiles () Avsluta Sub
  • Vi måste ställa in en referens till "Microsoft Scripting Runtime" -objektbiblioteket med hjälp av menyn Verktyg -> Referenser …, eftersom vi kommer att använda någon kod (objekt), som inte fungerar om vi inte inkluderar detta objektbibliotek.
  • Nu kommer vi att deklarera alla variabler.

Koda:

Dim FSO As New Scripting.FileSystemObject

Ovanstående FSO-variabel ger åtkomst till VBA FileSystemObject. Efter bindning kan vi använda funktioner som BuildPath, CopyFile, CreateTextFile, etc.

  • Nästa uttalande skapar ett TextStream-objekt. Genom TextStream-objektet kan vi läsa från eller lägga till originalfilen.

Koda:

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

Nu för att köra koden trycker vi på F5 då, vi kan se att en mapp med namnet 'Items_Sold' har skapats med hjälp av VBA-kod på skrivbordet.

I mappen finns det 7 unika filer som skapats med namnen på artikeln och vi kan ta reda på detaljer om endast det objektet i filerna.

Laptop.xls

Saker att komma ihåg om VBA JOIN-funktion

  • Den source måste vara en endimensionell array. Vi kan inte hänvisa till en enskild cell, eftersom detta kommer att skapa flera flerdimensionella matriser.
  • Om vi ​​anger en sträng med nollängd (“”) som en avgränsare, sammanfogas alla objekt i matrisen utan avgränsare.

Intressanta artiklar...