Tham gia VBA | Ví dụ từng bước về hàm nối VBA trong Excel

Tương tự như những gì chúng ta có trong trang tính dưới dạng hàm Concatenate và lệnh & được sử dụng để nối hai hoặc nhiều hơn hai chuỗi với nhau, trong VBA chúng ta sử dụng lệnh Join để làm như vậy, trong Join trong VBA, chúng ta lấy nguồn dữ liệu trong một mảng và tương tự như nối chúng ta sử dụng dấu phân cách để nối chúng.

Hàm VBA JOIN trong Excel

Như chính tên gọi của nó, hàm VBA JOIN được sử dụng để kết hợp một mảng các chuỗi con với dấu phân cách được chỉ định. Nếu chúng tôi không chỉ định bất kỳ dấu phân tách nào, thì nó sẽ lấy 'khoảng trắng' làm ký tự phân tách mặc định. Nó hoạt động tương tự như hàm Concatenate làm trong Excel ngoại trừ chúng ta phải chỉ định ký tự phân tách một lần duy nhất trong khi, trong hàm Concatenate, chúng tôi phải chỉ định ký tự phân tách mọi lúc giữa hai chuỗi.

Cú pháp của hàm là

Như chúng ta thấy, hàm nhận hai đối số và trả về một chuỗi. Lập luận là:

  1. SourceArray : Chúng ta cần chỉ định hoặc cung cấp tham chiếu đến một mảng các chuỗi con sẽ được nối với nhau.
  2. Dấu phân cách : Dấu phân cách được sử dụng để phân tách từng chuỗi con khi tạo chuỗi kết quả. Vì đây là đối số tùy chọn, nếu chúng ta bỏ qua nó, dấu phân cách sẽ được đặt thành khoảng trắng "".

Hàm VBA SPLIT là một hàm hoàn toàn ngược lại với hàm VBA JOIN.

Ví dụ về chức năng tham gia VBA

Dưới đây là các ví dụ về hàm nối trong Excel VBA.

Bạn có thể tải Mẫu Excel tham gia hàm VBA này tại đây - Mẫu Excel tham gia hàm VBA

Tham gia VBA - Ví dụ # 1

Giả sử, chúng ta muốn nối họ (Ramesh), giữa (Kumar) và họ (Mishra).

Các bước sẽ là:

  • Đầu tiên, chúng ta cần mở trình chỉnh sửa cơ bản trực quan. Chúng ta có thể thực hiện tương tự bằng cách nhấp vào lệnh 'Visual Basic' trong nhóm 'Mã' trong excel tab 'Nhà phát triển' hoặc chúng ta có thể sử dụng tổ hợp phím tắt Alt + F11 trong excel .

  • Chèn mô-đun bằng cách nhấp chuột phải vào “trang tính 1” và chọn lệnh “Chèn” từ menu ngữ cảnh và sau đó chọn “Mô-đun” để chèn.

  • Tạo một chương trình con có tên là 'JoiningName'.

Mã:

 Sub JoiningName () End Sub 

  • Sử dụng hàm JOIN như sau

Mã:

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

Chúng ta có thể thấy rằng chúng ta đã sử dụng hàm ARRAY để cung cấp SourceArray cho hàm JOIN và bỏ qua việc chỉ định ký tự phân tách nên 'dấu cách' sẽ là ký tự mặc định. Giá trị đã xử lý của hàm JOIN sẽ được ghi vào ô D2 khi chúng ta thực thi đoạn mã này bằng phím F5 hoặc theo cách thủ công.

Tham gia VBA - Ví dụ # 2

Giả sử, chúng ta muốn tạo các tệp excel khác nhau với tên mặt hàng chỉ chứa doanh số bán hàng cho mặt hàng đó.

  • Mở Visual Basic Editor bằng phím tắt Alt + F11.
  • Nhấp chuột phải vào trang tính 'Sheet1 ′ (Ví dụ 2)' để mở menu ngữ cảnh và nhấp vào 'Chèn' để chèn một 'Mô-đun' VBA trong dự án VBA.

  • Xác định một chương trình con có tên là 'CreateItemSoldFiles'.

Mã:

 Sub CreateItemSoldFiles () End Sub 

  • Chúng ta cần đặt một tham chiếu đến thư viện đối tượng 'Microsoft Scripting Runtime' bằng lệnh menu Tools -> References…, vì chúng ta sẽ sử dụng một số mã (đối tượng), sẽ không hoạt động nếu chúng ta không bao gồm thư viện đối tượng này.

  • Bây giờ chúng ta sẽ khai báo tất cả các biến.

Mã:

 Dim FSO dưới dạng Scripting mới.FileSystemObject

Biến FSO ở trên cấp quyền truy cập vào VBA FileSystemObject. Sau khi ràng buộc, chúng ta có thể sử dụng các chức năng như BuildPath, CopyFile, CreateTextFile, v.v.

  • Câu lệnh tiếp theo tạo một đối tượng TextStream. Thông qua đối tượng TextStream, chúng ta có thể đọc từ hoặc nối thêm vào tệp gốc.

Mã:

 Dim FSO As New Scripting.FileSystemObject Dim ts As Scripting.TextStream

  • Chúng tôi sẽ khai báo nhiều biến hơn. 'r' là để lưu giữ các hàng trong phạm vi, 'fs' để lưu trữ chuỗi được nối cuối cùng, 'cols' để lưu trữ số cột trong phạm vi, 'FolPath' để lưu trữ đường dẫn của thư mục để chúng tôi có thể lưu tệp trong thư mục và 'Items_Sold' để lưu trữ các tên mục khác nhau để tạo tệp với các tên này.

Mã:

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

  • Để đếm tổng số cột trong phạm vi, chúng ta sẽ xác định câu lệnh sau.

Mã:

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

Câu lệnh này trước tiên sẽ chọn vùng hiện tại cho ô A1 và sau đó sẽ đếm tổng số cột trong vùng hiện tại.

  • Chúng ta sẽ viết các câu lệnh sau để gán cho biến 'FolPath' một đường dẫn bằng cách sử dụng hàm VBA ENVIRON và Toán tử kết hợp.

Mã:

FolPath = Environ ("UserProfile") & "\ Desktop \ Items_Sold" Nếu không phải FSO.FolderExists (FolPath) thì FSO.CreateFolder FolPath

Câu lệnh thứ hai sẽ tạo thư mục nếu thư mục không tồn tại ở cùng một vị trí.

  • Đoạn mã này sẽ gán các giá trị của cột B lần lượt cho 'Items_Sold' Chúng tôi đã sử dụng 'hàm OFFSET' để lấy tham chiếu của ô trong cột B vì ô hiện đang được chọn nằm trong cột A.

Mã:

Items_Sold = r.Offset (0, 1) .Value

  • Câu lệnh có đường viền sau sẽ mở các tệp có tên được lưu trữ trong biến 'Items_Sold' lần lượt ở chế độ thêm vào (các giá trị mới sẽ được nối sau cùng).

Mã:

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

Chúng tôi đã sử dụng toán tử Concatenate với các biến 'FolPath' và 'Items_Sold' và các giá trị tĩnh (“\” và “.xls”) để tạo tên tệp cho tệp excel.

  • Chúng ta cần lưu ý rằng hàm VBA JOIN nhận mảng một chiều duy nhất là SourceArray Để chuyển các hàng thành mảng một chiều, chúng ta cần sử dụng phương thức Application.Transpose hai lần.

Mã:

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

Chúng tôi đã sử dụng phương pháp Thay đổi kích thước của đối tượng phạm vi để thay đổi kích thước phạm vi thành chiều rộng của một số cột trong phạm vi.

Là dấu phân cách, chúng tôi đã sử dụng từ khóa 'vbTab' để các giá trị sẽ được điền vào các ô khác nhau.

  • Vì chúng tôi đã lưu trữ giá trị đã xử lý của hàm JOIN vào biến 'fs', chúng tôi sẽ ghi các giá trị của fs vào các dòng mới của tệp excel được tạo VBA cho mọi hàng trong tệp gốc của chúng tôi từ hàng số 2 đến hàng cuối cùng (trong trường hợp của chúng tôi là là hàng thứ 350).

  • Trước khi kết thúc vòng lặp, chúng tôi sẽ đóng tệp đã mở. Mã sẽ được hiển thị trong ảnh chụp màn hình.

Chúng tôi đã viết mã đầy đủ ngay bây giờ.

Mã:

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. Đếm FolPath = Environ ("UserProfile") & "\ Desktop \ Items_Sold" Nếu không phải là FSO.FolderExists (FolPath) Sau đó FSO.CreateFolder FolPath Cho mỗi r Trong Phạm vi ("A2", Phạm vi ("A1"). Kết thúc (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

Bây giờ để thực thi mã, chúng ta sẽ nhấn F5 sau đó, chúng ta có thể thấy rằng một thư mục có tên 'Items_Sold' đã được tạo với sự trợ giúp của mã VBA trên màn hình.

Trong thư mục, có 7 tệp duy nhất được tạo với tên của mục và chúng tôi có thể tìm hiểu chi tiết về mục cụ thể đó trong tệp.

Máy tính xách tay.xls

Những điều cần nhớ về hàm VBA JOIN

  • Các SourceArray phải là một mảng một chiều. Chúng ta không thể tham chiếu đến một ô riêng lẻ, vì điều này sẽ tạo ra nhiều mảng đa chiều.
  • Nếu chúng ta chỉ định một chuỗi có độ dài bằng 0 (“”) làm dấu phân cách, thì tất cả các mục trong mảng được nối với không có dấu phân cách.

$config[zx-auto] not found$config[zx-overlay] not found