Dołącz do VBA - Przykłady funkcji łączenia VBA w programie Excel krok po kroku

Spisie treści

Podobnie jak w arkuszu roboczym jako funkcja Concatenate i polecenie &, które służy do łączenia dwóch lub więcej niż dwóch ciągów razem, w VBA używamy polecenia Join, aby to zrobić, w Join in VBA pobieramy źródło danych w tablicy i podobnie jak w przypadku konkatenacji używamy separatora, aby do nich dołączyć.

Funkcja Excel VBA JOIN

Jak sama nazwa wskazuje, funkcja VBA JOIN służy do łączenia razem tablicy podciągów z określonym separatorem. Jeśli nie określimy żadnego separatora, wówczas jako domyślny separator przyjmuje „spację”. Działa tak samo, jak funkcja Concatenate w programie Excel, z wyjątkiem tego, że musimy określić znak separatora tylko raz, podczas gdy w funkcji Concatenate musimy określić znak separatora za każdym razem między dwoma ciągami.

Składnia funkcji to

Jak widać, funkcja przyjmuje dwa argumenty i zwraca ciąg. Argumentami są:

  1. SourceArray : Musimy określić lub podać odniesienie do tablicy podciągów, które mają zostać połączone.
  2. Separator : separator służy do oddzielania każdego z podciągów podczas tworzenia wynikowego ciągu. Ponieważ jest to argument opcjonalny, jeśli go pominiemy, jako separator zostanie ustawiona spacja ”„.

Funkcja VBA SPLIT jest dokładnym przeciwieństwem funkcji VBA JOIN.

Przykłady funkcji łączenia VBA

Poniżej znajdują się przykłady funkcji łączenia w Excel VBA.

VBA Join - przykład # 1

Załóżmy, że chcemy dołączyć do pierwszego (Ramesh), środkowego (Kumar) i nazwiska (Mishra).

Kroki byłyby następujące:

  • Najpierw musimy otworzyć edytor Visual Basic. Możemy zrobić to samo, klikając polecenie „Visual Basic” w grupie „Kod” w zakładce „Deweloper” programu Excel lub możemy użyć klawisza skrótu programu Excel Alt + F11 .
  • Wstaw moduł, klikając prawym przyciskiem myszy „arkusz 1” i wybierając polecenie „Wstaw” z menu kontekstowego, a następnie wybierz „Moduł”, aby wstawić.
  • Utwórz podprogram o nazwie „JoiningName”.

Kod:

Sub JoiningName () End Sub
  • Użyj funkcji JOIN w następujący sposób

Kod:

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

Widzimy, że użyliśmy funkcji ARRAY, aby dostarczyć SourceArray do funkcji JOIN i pominięto określenie znaku separatora, więc spacja byłaby znakiem domyślnym. Przetwarzana wartość funkcji JOIN zostanie zapisana w komórce D2, gdy wykonamy ten kod za pomocą klawisza F5 lub ręcznie.

Połączenie VBA - przykład nr 2

Załóżmy, że chcemy utworzyć różne pliki programu Excel z nazwą przedmiotu zawierającą sprzedaż tylko dla tego przedmiotu.

  • Otwórz Edytor Visual Basic za pomocą klawisza skrótu Alt + F11.
  • Kliknij prawym przyciskiem myszy arkusz „Arkusz1” (Przykład 2) ”, aby otworzyć menu kontekstowe i kliknij„ Wstaw ”, aby wstawić„ Moduł ”VBA do projektu VBA.
  • Zdefiniuj podprogram o nazwie „CreateItemSoldFiles”.

Kod:

Sub CreateItemSoldFiles () End Sub
  • Musimy ustawić odniesienie do biblioteki obiektów „Microsoft Scripting Runtime” za pomocą polecenia menu Narzędzia -> References…, ponieważ użyjemy kodu (obiektów), który nie będzie działał, jeśli nie włączymy tej biblioteki obiektów.
  • Teraz zadeklarujemy wszystkie zmienne.

Kod:

Dim FSO As New Scripting.FileSystemObject

Powyższa zmienna FSO daje dostęp do VBA FileSystemObject. Po powiązaniu możemy skorzystać z funkcji takich jak BuildPath, CopyFile, CreateTextFile itp.

  • Następna instrukcja tworzy obiekt TextStream. Poprzez obiekt TextStream możemy czytać z oryginalnego pliku lub dołączać do niego.

Kod:

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

Teraz, aby wykonać kod, naciśniemy klawisz F5, a następnie zobaczymy, że folder o nazwie „Items_Sold” został utworzony za pomocą kodu VBA na pulpicie.

W folderze utworzonych jest 7 unikalnych plików z nazwami pozycji i możemy dowiedzieć się szczegółów tylko o tej konkretnej pozycji w plikach.

Laptop.xls

Rzeczy do zapamiętania o funkcji VBA JOIN

  • Tablica SourceArray musi być tablicą jednowymiarową. Nie możemy odnosić się do pojedynczej komórki, ponieważ spowoduje to utworzenie wielu wielowymiarowych tablic.
  • Jeśli jako separator określimy ciąg o zerowej długości („”), wszystkie elementy w tablicy zostaną połączone bez separatorów.

Interesujące artykuły...