Hàm bạn chắc là chỉ nối Range ngang, nối Range dọc thì sao? Tôi gà mờ vọc nên yếu. Nhờ bạn phát triển thêm code trên cho nối dọc. Tôi cũng muốn nối Range (này) theo điều kiện của Range (khác) nhưng không tưởng tượng ra cách viết. Ứng dụng vào việc gửi Mail đến những người nào nợ (việc, tiền...), việc dùng hàm excel thông thường cũng ra nhưng mất thời gian lắm, nhất là các ACE cty tôi đa phần cực yếu excel.
Tôi đến với Excel và VBA từ kiến thức lập trình.
Theo luật chung của lập trình thì tôi chỉ viết những hàm căn bản. Hàm chinh dùng để gọi những hàm ấy mà làm việc đúng chỗ, đúng nhiệm vụ. LTHĐT thì đại khái cũng vậy thôi, công việc là những phương thức nhỏ được lôi ra đúng lúc, đúng chỗ.
Điều này ngược với những bạn đi thuần túy theo VBA thì có khuynh hướng viết một hàm rồi cứ IF-THEN-ELSE thành nhiều công việc.
Thói quen của tôi thì cái nào làm việc được thì để yên, trừ phi phải chỉnh rất it để share code.
Trong trường hợp này, tuy hàm có thể thêm để nó có thể làm việc cả ngang lẫn dọc lẫn nhiều nhóm ranges, nhưng tôi tính ra code thì chỉ có một vài dòng để share mà IF-THEN-ELSE cả đống cho nên thây kệ. Lúc cần dọc thì viết cái hàm nhỏ khác.
Đại khái cấu trúc sẽ như vầy:
Public Function GopText(rg As Rnge, Optional delim As String = "+")
If (rg là nhóm ranges) Then
' gọi hàm gộp nhiều ranges, hàm này có thể sẽ gọi hai hàm kia
ElseIf (rg là 1 nhóm ngang) Then
' gọi hàm gộp nhóm ngang
ElseIf (rg là nhóm dọc) Then)
' gọi hàm gộp nhóm dọc
End If
End Function
Private Function GopDuThu(....)
...
End Function
Private Function GopRangeNgang(...)
' là hàm ở bài #8, sửa tên lại. Hặc lười thì cho hàm này gọi hàm ở bài #8
End Function
Private Function GopRangeDoc(...)
' viết code như bài #8, chỉnh cho chạy theo range dọc
End Function
Chú thích:
- Bạn để ý sẽ thấy chỉ có hàm chính là public, các thứ còn lại là private. Tôi viết theo chiều hướng của LT cấu trúc. Người dùng không cần biết đến các hàm phụ, họ chỉ cần biết hàm chính.
- Tôi chưa tính đến cái vụ Optional Delim.
Muốn thực hiện, bạn đặt thêm một biến toàn cục DELM (tức là trước hàm đầu tiên) cho Module. Vì cần chỉ toàn cục cho module (các Modules khác không thấy nó) cho nên bạn phải đặt nó là Private.
Hàm chính chỉ cần xét câu lệnh ngay dòng code đầu:
DELM = IIF(delim <> "", delim, "+")
Các hàm còn lại sẽ dùng cái DELM này.