VBA Join | Exemples pas a pas de la funció de connexió Excel VBA

De manera similar al que tenim al full de càlcul com a funció Concatenar i l’ordre & que s’utilitza per unir dues o més de dues cadenes juntes, a VBA fem servir la comanda Unir-se per fer-ho, a Unir a VBA agafem l’origen de les dades en una matriu. i de manera similar a la concatenació, fem servir un delimitador per unir-los.

Funció Excel VBA JOIN

Com el seu propi nom indica, el Funció VBA JOIN s'utilitza per unir una matriu de subcadenes amb el delimitador especificat. Si no especifiquem cap delimitador, pren "espai" com a caràcter de delimitador per defecte. Fa el mateix treball que la funció Concatenar a Excel, tret que hem d’especificar el caràcter delimitador una sola vegada, mentre que a la funció Concatenar hem d’especificar el caràcter delimitador cada vegada entre cada dues cadenes.

La sintaxi de la funció és

Com podem veure, la funció agafa dos arguments i retorna una cadena. Els arguments són:

  1. SourceArray: Hem d’especificar o fer referència a una matriu de subcadenes que s’han d’unir.
  2. Delimitador: El delimitador s'utilitza per separar cadascuna de les subcadenes quan es crea la cadena resultant. Com que és un argument opcional, si l'ometem, el delimitador es defineix com a espai "".

La funció VBA SPLIT és una funció exactament oposada a la funció VBA JOIN.

Exemples de funció VBA Join

A continuació es mostren els exemples de funció de combinació a Excel VBA.

Podeu descarregar aquesta plantilla Excel de la funció VBA Join Function aquí: plantilla Excel de la funció VBA Join

Unió VBA: exemple 1

Suposem que volem unir-nos al primer (Ramesh), al mig (Kumar) i al cognom (Mishra).

Els passos serien:

  • En primer lloc, hem d'obrir l'editor visual basic. Podem fer el mateix fent clic a l’ordre ‘Visual Basic’ al grup ‘Codi’ de la pestanya ‘Desenvolupador’ excel o podem utilitzar la tecla de drecera Excel Alt + F11.

  • Inseriu el mòdul fent clic dret sobre un "full 1" i escollint l'ordre "Insereix" al menú contextual i, a continuació, trieu "Mòdul" per inserir.

  • Creeu una subrutina anomenada "Nom_unió".

Codi:

 Sub JoiningName () Final Sub 

  • Utilitzeu la funció JOIN de la següent manera

Codi:

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

Podem veure que hem utilitzat la funció ARRAY per proporcionar SourceArray a la funció JOIN i hem saltat per especificar el caràcter delimitador, de manera que l’espai seria el caràcter per defecte. El valor processat de la funció JOIN s’escriurà a la cel·la D2 quan executem aquest codi amb la tecla F5 o manualment.

Unió VBA: exemple 2

Suposem que volem crear diversos fitxers Excel amb el nom de l'article que contingui vendes només per a aquest article.

  • Obriu l'Editor de Visual Basic amb la tecla de drecera Alt + F11.
  • Feu clic amb el botó dret al full "Full1" (exemple 2) per obrir el menú contextual i feu clic a "Insereix" per inserir un "mòdul" VBA al projecte VBA.

  • Definiu una subrutina anomenada "CreateItemSoldFiles".

Codi:

 Sub CreateItemSoldFiles () Final Sub 

  • Hem d’establir una referència a la biblioteca d’objectes ‘Microsoft Scripting Runtime’ mitjançant el menú Eines -> Referències ..., ja que utilitzarem algun codi (objectes), que no funcionarà si no incloem aquesta biblioteca d’objectes.

  • Ara declararem totes les variables.

Codi:

 Dim FSO com a nou scripting.FileSystemObject

La variable FSO anterior dóna accés a VBA FileSystemObject. Després de l'enllaç, podem utilitzar funcions com BuildPath, CopyFile, CreateTextFile, etc.

  • La següent sentència crea un objecte TextStream. Mitjançant l’objecte TextStream, podem llegir o afegir al fitxer original.

Codi:

 Dim FSO com a nou scripting.FileSystemObject Dim ts com a scripting.TextStream

  • Declararem més variables. 'r' serveix per mantenir files de l'interval, 'fs' per emmagatzemar la cadena unida final, 'cols' per emmagatzemar el nombre de columnes de l'interval, 'FolPath' per emmagatzemar el camí de la carpeta de manera que puguem desar els fitxers a la carpeta i "Articles_Venduts" per emmagatzemar diversos noms d'elements per crear un fitxer amb aquests noms.

Codi:

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

  • Per comptar el nombre total de columnes a l'interval, definirem la següent afirmació.

Codi:

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

Aquesta declaració primer seleccionarà la regió actual per a la cel·la A1 i, a continuació, comptarà el nombre total de columnes de la regió actual.

  • Escriurem les següents afirmacions per assignar a la variable ‘FolPath’ un camí mitjançant la funció VBA ENVIRON i l’operador de concatenació.

Codi:

FolPath = Environ ("UserProfile") & "\ Desktop \ Items_Sold" Si no és FSO.FolderExists (FolPath), aleshores FSO.CreateFolder FolPath

La segona sentència crearà la carpeta si la carpeta no existeix a la mateixa ubicació.

  • Aquest codi assignarà els valors de la columna B un a un a "Articles_Venduts". Hem utilitzat "Funció OFFSET" per obtenir la referència de la cel·la de la columna B, ja que la cel·la seleccionada actualment es troba a la columna A.

Codi:

Articles_Venduts = r.Offset (0, 1) .Valor

  • La següent declaració vorejada obrirà els fitxers amb noms emmagatzemats a la variable "Articles_Sold" d'un en un en mode d'afegir (els valors nous s'afegiran finalment).

Codi:

 Estableix ts = FSO.OpenTextFile (FolPath & "\" & Items_Sold & ".xls", ForAppending, True)

Hem utilitzat l’operador Concatenar amb variables ‘FolPath’ i ‘Items_Sold’ i valors estàtics (“\” i ”.xls”) per crear noms de fitxers per a fitxers Excel.

  • Hem de tenir en compte que la funció VBA JOIN pren una única matriu unidimensional com a SourceArray. Per convertir les files en una matriu unidimensional, hem d’utilitzar el mètode Application.Transpose dues vegades.

Codi:

fs = Join (Application.Transpose (Application.Transpose (r.Resize (1, cols) .Value)), vbTab)

Hem utilitzat el mètode Redimensiona de l’objecte d’interval per redimensionar l’interval a l’amplada d’un nombre de columnes de l’interval.

Com a delimitador, hem utilitzat la paraula clau ‘vbTab’ perquè els valors s’omplissin a diferents cel·les.

  • Com que hem emmagatzemat el valor processat de la funció JOIN a la variable 'fs', escriurem els valors de fs a les noves línies de fitxers excel creats per VBA per a cada fila del fitxer original des de la fila número 2 fins a l'última fila (en el nostre cas, és la 350a fila).

  • Abans d’acabar el bucle, tancarem el fitxer obert. El codi seria el que es mostra a la captura de pantalla.

Ara hem escrit el codi complet.

Codi:

 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. Compteu FolPath = Environ ("Perfil d'usuari") i "\ Desktop \ Items_Sold" si no és FSO.FolderExists (FolPath), aleshores FSO.CreateFolder FolPath per a cada r del rang ("A2", rang ("A1"). ) 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 

Ara per executar el codi, prémerem F5 i, a continuació, podrem veure que s’ha creat una carpeta anomenada ‘Articles_Sold’ amb l’ajuda del codi VBA a l’escriptori.

A la carpeta, hi ha 7 fitxers únics creats amb els noms de l’element i només podem trobar detalls sobre aquest element en particular.

Laptop.xls

Coses que cal recordar sobre la funció VBA JOIN

  • El SourceArray ha de ser una matriu unidimensional. No podem referir-nos a una cel·la individual, ja que això crearà múltiples matrius multidimensionals.
  • Si especifiquem una cadena de longitud zero ("") com a delimitador, tots els elements de la matriu es concatenen sense delimitadors.