VBA Üyeliği - Adım Adım Excel VBA Birleştirme İşlevine Örnekler

Birleştirme işlevi olarak çalışma sayfasında sahip olduğumuza ve iki veya ikiden fazla dizeyi bir araya getirmek için kullanılan & komutuna benzer şekilde, VBA'da bunu yapmak için Join komutunu kullanırız, VBA'da Join'te bir dizideki verilerin kaynağını alırız ve birleştirmeye benzer şekilde, onları birleştirmek için bir sınırlayıcı kullanıyoruz.

Excel VBA JOIN İşlevi

Adından da anlaşılacağı gibi, VBA JOIN işlevi , bir alt dizeyi belirtilen sınırlayıcıyla birleştirmek için kullanılır. Herhangi bir sınırlayıcı belirtmezsek, varsayılan ayırıcı karakter olarak 'boşluk' alır. Sınırlayıcı karakteri yalnızca bir kez belirtmemiz dışında, Concatenate işleviyle aynı işi yapar, oysa Concatenate işlevinde her iki dizge arasında her seferinde sınırlayıcı karakteri belirtmemiz gerekir.

İşlevin sözdizimi

Gördüğümüz gibi, işlev iki argüman alır ve bir dizge döndürür. Bağımsız değişkenler şunlardır:

  1. SourceArray : Birleştirilecek bir dizi alt dizeyi belirtmemiz veya referans vermemiz gerekir.
  2. Sınırlayıcı : Sınırlayıcı , sonuç dizesi oluşturulurken alt dizelerin her birini ayırmak için kullanılır. Bu isteğe bağlı bir argüman olduğundan, onu atlarsak, sınırlayıcı boşluk olacak şekilde ayarlanır ”“.

VBA SPLIT işlevi, VBA JOIN işlevinin tam tersi bir işlevdir.

VBA Birleştirme İşlevine Örnekler

Aşağıda Excel VBA'da birleştirme işlevi örnekleri verilmiştir.

VBA Join - Örnek 1

Diyelim ki, ilk (Ramesh), orta (Kumar) ve soyadına (Mishra) katılmak istiyoruz.

Adımlar şöyle olacaktır:

  • İlk olarak, visual basic editörü açmamız gerekiyor. Aynı işlemi 'Developer' sekmesi excel altında 'Code' grubunda 'Visual Basic' komutuna tıklayarak yapabiliriz veya excel kısayol tuşu Alt + F11'i kullanabiliriz .
  • Modülü, bir "sayfa 1" e sağ tıklayıp bağlamsal menüden "Ekle" komutunu seçerek ekleyin ve ardından eklemek için "Modül" ü seçin.
  • 'JoiningName' adlı bir alt yordam oluşturun.

Kod:

Sub JoiningName () End Sub
  • JOIN işlevini aşağıdaki gibi kullanın

Kod:

Alt KatılmaAdı () Aralık ("D2"). Değer = Katıl (Dizi ("Ramesh", "Kumar", "Mishra")) Son Alt

Kaynak Dizini JOIN işlevine sağlamak için ARRAY işlevini kullandığımızı ve sınırlayıcı karakteri belirtmek için atladığımızı görebiliriz, böylece 'boşluk' varsayılan karakter olur. JOIN işlevinin işlenmiş değeri, bu kodu F5 tuşunu kullanarak veya manuel olarak çalıştırdığımızda D2 hücresine yazılacaktır.

VBA Join - Örnek 2

Diyelim ki, yalnızca o öğe için satışları içeren öğe adıyla çeşitli excel dosyaları oluşturmak istiyoruz.

  • Alt + F11 kısayol tuşunu kullanarak Visual Basic Düzenleyicisi'ni açın.
  • Bağlamsal menüyü açmak için 'Sayfa1 ′ (Örnek 2)' sayfasına sağ tıklayın ve VBA projesine bir VBA 'Modülü' eklemek için 'Ekle'ye tıklayın.
  • 'CreateItemSoldFiles' adlı bir alt rutin tanımlayın.

Kod:

Sub CreateItemSoldFiles () End Sub
  • Bu nesne kitaplığını dahil etmezsek çalışmayacak bazı kodlar (nesneler) kullanacağımız için, Araçlar menüsü -> Referanslar… komutunu kullanarak 'Microsoft Scripting Runtime' nesne kitaplığına bir referans ayarlamamız gerekir.
  • Şimdi tüm değişkenleri açıklayacağız.

Kod:

Yeni Komut Dosyası Olarak Dim FSO.FileSystemObject

Yukarıdaki FSO değişkeni, VBA FileSystemObject'e erişim sağlar. Bağlamadan sonra BuildPath, CopyFile, CreateTextFile vb. Fonksiyonları kullanabiliriz.

  • Sonraki ifade bir TextStream nesnesi oluşturur. TextStream nesnesi aracılığıyla, orijinal dosyadan okuyabilir veya dosyaya ekleyebiliriz.

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

Şimdi kodu çalıştırmak için F5'e basacağız, masaüstünde VBA kodu yardımı ile 'Items_Sold' isimli bir klasör oluşturulduğunu görebiliriz.

Klasörde, öğenin adlarıyla oluşturulmuş 7 benzersiz dosya vardır ve dosyalarda yalnızca belirli öğeyle ilgili ayrıntıları bulabiliriz.

Laptop.xls

VBA JOIN Fonksiyonu Hakkında Hatırlanması Gereken Şeyler

  • KaynakDizi tek boyutlu bir dizi olmalıdır. Birden çok çok boyutlu diziler oluşturacağından, tek bir hücreye atıfta bulunamayız.
  • Sınırlayıcı olarak sıfır uzunluklu bir dize ("") belirtirsek, dizideki tüm öğeler sınırlayıcı olmadan birleştirilir.

Ilginç makaleler...