VBA Deltag - Trin-for-trin eksempler på Excel VBA Join-funktion

Indholdsfortegnelse

Svarende til hvad vi har i regnearket som sammenkædningsfunktion og kommandoen &, der bruges til at forbinde to eller flere end to strenge sammen, i VBA bruger vi Deltag kommando til at gøre det, i Deltag i VBA tager vi kilden til dataene i en matrix og ligner sammenkædningen bruger vi en afgrænser til at slutte sig til dem.

Excel VBA JOIN-funktion

Som selve navnet antyder, bruges VBA JOIN-funktionen til at forbinde en matrix af understrenge med den specificerede afgrænser. Hvis vi ikke angiver nogen afgrænser, tager det 'mellemrum' som et standardafgrænsningstegn. Det gør det samme arbejde som funktionen Sammenkædning gør i Excel, bortset fra at vi kun skal angive afgrænsningstegn en gang, mens vi i sammenkædningsfunktionen skal angive afgrænsningstegn hver gang mellem hver anden streng.

Funktionens syntaks er

Som vi kan se, tager funktionen to argumenter og returnerer en streng. Argumenterne er:

  1. SourceArray : Vi er nødt til at specificere eller henvise til en matrix af understrenge, der skal sammenføjes.
  2. Afgrænser : Afgrænseren bruges til at adskille hver af understrengene, når den resulterende streng oprettes. Da dette er et valgfrit argument, hvis vi udelader det, er afgrænseren indstillet til at være et mellemrum ”“.

VBA SPLIT-funktionen er en nøjagtig modsat funktion af VBA JOIN-funktionen.

Eksempler på VBA Join-funktion

Nedenfor er eksemplerne på sammenføjningsfunktion i Excel VBA.

VBA Join - Eksempel # 1

Antag, at vi ønsker at slutte os til fornavn (Ramesh), mellem (Kumar) og efternavn (Mishra).

Trin ville være:

  • Først skal vi åbne den visuelle grundeditor. Vi kan gøre det samme ved at klikke på 'Visual Basic' kommandoen i gruppen 'Kode' under fanen 'Udvikler' excel, eller vi kan bruge excel genvejstasten Alt + F11 .
  • Indsæt modulet ved at højreklikke på et “ark 1” og vælge kommandoen ”Indsæt” fra den kontekstmenu, og vælg derefter ”Modul” for at indsætte.
  • Opret en underrutine ved navn 'JoiningName'.

Kode:

Sub JoiningName () Afslut Sub
  • Brug funktionen JOIN som følger

Kode:

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

Vi kan se, at vi har brugt ARRAY-funktionen til at give SourceArray til JOIN-funktionen og sprunget over for at specificere afgrænsningstegn, så 'space' ville være standardtegn. Den behandlede værdi af JOIN-funktionen skrives i celle D2, når vi udfører denne kode ved hjælp af F5-tasten eller manuelt.

VBA Join - Eksempel # 2

Antag, vi vil oprette forskellige excel-filer med varenavnet, der kun indeholder salg for den vare.

  • Åbn Visual Basic Editor ved hjælp af genvejstasten Alt + F11.
  • Højreklik på 'Sheet1' (eksempel 2) 'ark for at åbne kontekstmenuen og klik på' Insert 'for at indsætte et VBA' modul 'i VBA-projektet.
  • Definer en underrutine ved navn 'CreateItemSoldFiles'.

Kode:

Sub CreateItemSoldFiles () Afslut Sub
  • Vi er nødt til at indstille en henvisning til 'Microsoft Scripting Runtime' objektbibliotek ved hjælp af menuen Funktioner -> Referencer … kommando, da vi bruger en kode (objekter), som ikke fungerer, hvis vi ikke inkluderer dette objektbibliotek.
  • Nu erklærer vi alle variablerne.

Kode:

Dim FSO som ny scripting.FileSystemObject

Ovenstående FSO-variabel giver adgang til VBA FileSystemObject. Efter binding kan vi bruge funktioner som BuildPath, CopyFile, CreateTextFile osv.

  • Den næste sætning opretter et TextStream-objekt. Gennem TextStream-objektet kan vi læse fra eller føje til den originale fil.

Kode:

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 for at udføre koden skal vi trykke på F5 så kan vi se, at en mappe med navnet 'Items_Sold' er oprettet ved hjælp af VBA-kode på skrivebordet.

I mappen er der 7 unikke filer oprettet med navnene på elementet, og vi kan finde ud af detaljer om kun det bestemte element i filer.

Laptop.xls

Ting at huske om VBA JOIN-funktion

  • Den SourceArray skal være et endimensionalt array. Vi kan ikke henvise til en individuel celle, da dette vil skabe flere flerdimensionale arrays.
  • Hvis vi angiver en streng med nul længde (“”) som en afgrænser, sammenkædes alle elementer i arrayet uden afgrænsere.

Interessante artikler...