VBA Liity - Vaiheittaiset esimerkit Excel VBA Join -toiminnosta

Sisällysluettelo

Samanlainen kuin mitä laskentataulukossa on Liitäntäfunktio ja & -komento, jota käytetään kahden tai useamman kuin kahden merkkijonon yhdistämiseen, VBA: ssa käytämme Liity-komentoa siihen, Liity VBA: ssa otamme taulukon tietojen lähteen ja samanlainen kuin ketjutus, käytämme erotinta liittymään niihin.

Excel VBA JOIN -toiminto

Kuten nimestä itsestään käy ilmi, VBA JOIN -toimintoa käytetään yhdistämään joukko alimerkkijonoja määritetyn erottimen kanssa. Jos emme määritä mitään erotinta, se vie 'välilyönnin' oletusarvoiseksi erottimeksi. Se tekee saman työn kuin konkatenaattitoiminto Excelissä, paitsi että meidän on määritettävä erotinmerkki vain kerran, kun taas ketjutustoiminnossa on määriteltävä erotinmerkki joka kerta kahden merkkijonon välissä.

Funktion syntaksi on

Kuten näemme, funktio ottaa kaksi argumenttia ja palauttaa merkkijonon. Väitteet ovat:

  1. SourceArray : Meidän on määritettävä liitettävä alaryhmä tai annettava viittaus siihen.
  2. Erotin : Erotinta käytetään erottamaan kukin alimerkkijono, kun luot luotua merkkijonoa. Koska tämä on valinnainen argumentti, jos jätämme sen pois, erotin asetetaan välilyönniksi "".

VBA SPLIT -toiminto on täsmälleen päinvastainen toiminto VBA JOIN -toiminnolla.

Esimerkkejä VBA Join -toiminnosta

Alla on esimerkkejä liittymistoiminnosta Excel VBA: ssa.

VBA Liity - Esimerkki 1

Oletetaan, että haluamme liittyä etu- (Ramesh), keskimmäiseen (Kumar) ja sukunimeen (Mishra).

Vaiheet olisivat:

  • Ensinnäkin meidän on avattava visuaalinen peruseditori. Voimme tehdä saman napsauttamalla Visual Basic -komentoa Koodi-ryhmässä Kehittäjä-välilehden alla tai voimme käyttää Excelin pikanäppäintä Alt + F11 .
  • Lisää moduuli napsauttamalla hiiren kakkospainikkeella “arkki 1” -kuvaketta, valitsemalla asiayhteysvalikosta komento Lisää ja valitsemalla sitten lisättävä moduuli.
  • Luo aliohjelma nimeltä JoiningName.

Koodi:

Sub JoiningName () Lopeta Sub
  • Käytä JOIN-toimintoa seuraavasti

Koodi:

Sub JoiningName () -alue ("D2"). Arvo = Liity (Taulukko ("Ramesh", "Kumar", "Mishra")) Lopeta ala

Voimme nähdä, että olemme käyttäneet ARRAY-funktiota tarjotaksemme SourceArray-toiminnon JOIN-funktiolle ja ohittaneet määritellä erotinmerkin, joten "välilyönti" olisi oletusmerkki. JOIN-funktion käsitelty arvo kirjoitetaan soluun D2, kun suoritamme tämän koodin F5-näppäimellä tai manuaalisesti.

VBA Liity - esimerkki 2

Oletetaan, että haluamme luoda useita Excel-tiedostoja, joiden nimike sisältää myyntiä vain tälle tuotteelle.

  • Avaa Visual Basic Editor käyttämällä pikanäppäintä Alt + F11.
  • Napsauta hiiren kakkospainikkeella 'Sheet1' (esimerkki 2) -arkkia avataksesi asiayhteysvalikon ja napsauta 'Insert' lisätäksesi VBA-moduulin VBA-projektiin.
  • Määritä aliohjelma nimeltä 'CreateItemSoldFiles'.

Koodi:

Sub CreateItemSoldFiles () End Sub
  • Meidän on asetettava viittaus Microsoft Scripting Runtime -objektikirjastoon Työkalut-valikko -> Viitteet … -komennolla, koska käytämme joitain koodeja (objekteja), jotka eivät toimi, jos emme sisällä tätä objektikirjastoa.
  • Nyt ilmoitamme kaikki muuttujat.

Koodi:

Hämärtää FSO: ta uudena komentosarjana.FileSystemObject

Yllä oleva FSO-muuttuja antaa pääsyn VBA FileSystemObject -ohjelmaan. Sitomisen jälkeen voimme käyttää toimintoja, kuten BuildPath, CopyFile, CreateTextFile jne.

  • Seuraava lause luo TextStream-objektin. TextStream-objektin kautta voimme lukea tai liittää alkuperäiseen tiedostoon.

Koodi:

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

Nyt koodin suorittamiseksi painamme sitten F5, näemme, että kansio nimeltä Items_Sold on luotu työpöydän VBA-koodin avulla.

Kansiossa on 7 yksilöllistä tiedostoa, jotka on luotu kohteen nimillä, ja voimme löytää yksityiskohtia vain kyseisestä tiedostosta.

Kannettava tietokone. Xls

Muistettavaa VBA JOIN -toiminnosta

  • SourceArray on oltava yksiulotteinen matriisi. Emme voi viitata yksittäiseen soluun, koska se luo useita moniulotteisia taulukoita.
  • Jos määritämme nollapituisen merkkijonon (“”) erottimeksi, kaikki matriisin kohteet ketjutetaan ilman erottimia.

Mielenkiintoisia artikkeleita...