Nối các chuỗi có số lượng ký tự giống nhau

Liên hệ QC

Thiên Thanh1

Thành viên mới
Tham gia
16/10/20
Bài viết
36
Được thích
9
Nhờ anh chị viết giúp hàm VBA như file đính kèm
Cảm ơn các anh chị.
 

File đính kèm

  • Nối các chuỗi có số lượng ký tự giống nhau.xlsm
    9.9 KB · Đọc: 20
Nhờ anh chị viết giúp hàm VBA như file đính kèm
Cảm ơn các anh chị.
Bạn thử hàm nhé:
Rich (BB code):
Function NoiChuoi(SoKyTu As Long, DauPhanCach As String, VungDuLieu As Range) As String
Dim rg As Range, cll As Range
Dim KetQua As String

For Each cll In VungDuLieu
    If Len(Trim(cll)) = SoKyTu Then
        KetQua = KetQua + Trim(cll) + DauPhanCach
    End If
Next
NoiChuoi = Left(KetQua, Len(KetQua) - 1)
End Function
 
Upvote 0
Bạn thử hàm nhé:
Rich (BB code):
Function NoiChuoi(SoKyTu As Long, DauPhanCach As String, VungDuLieu As Range) As String
Dim rg As Range, cll As Range
Dim KetQua As String

For Each cll In VungDuLieu
    If Len(Trim(cll)) = SoKyTu Then
        KetQua = KetQua + Trim(cll) + DauPhanCach
    End If
Next
NoiChuoi = Left(KetQua, Len(KetQua) - 1)
End Function
DauPhanCach là "-0-" thì sao?
 
Upvote 0
À mà trong vba, string cũng cộng chuỗi được giống python mấy bác nhỉ, nào giờ em mới biết ( trước cứ & và & )
 
Upvote 0
À mà trong vba, string cũng cộng chuỗi được giống python mấy bác nhỉ, nào giờ em mới biết ( trước cứ & và & )
Hic! Tôi cũng hay có thói quen dùng &, nhưng giờ phát hiện thấy dùng & mà gõ dính vào với biến hoặc mã lệnh thì VBA hiểu đó là ký tự nằm chung trong biến/mã đó chứ không phải là toán tử nên báo lỗi. Dùng + thì VBA tự hiểu là toán tử và tách ra giùm mình, tiện hơn.
 
Upvote 0
gõ dính vào với biến hoặc mã lệnh thì VBA hiểu đó là ký tự nằm chung trong biến/mã đó chứ không phải là toán tử nên báo lỗi
Theo em nghĩ là không phải hiểu nằm chung biến, mà tại vì khai báo a as long có thể thay bằng a& nên viết cạnh nhau nó lỗi là vậy. Còn gì thì gì, dùng + có lẽ vẫn nên hạn chế sử dụng hơn, ví dụ khai báo a as string thì + nó nối chuỗi, chứ giả sử quên đuôi as string mà vba hiểu a là một variant nó lại cộng búa lua xua đau đầu hơn ấy :D
 
Upvote 0
Theo em nghĩ là không phải hiểu nằm chung biến, mà tại vì khai báo a as long có thể thay bằng a& nên viết cạnh nhau nó lỗi là vậy. Còn gì thì gì, dùng + có lẽ vẫn nên hạn chế sử dụng hơn, ví dụ khai báo a as string thì + nó nối chuỗi, chứ giả sử quên đuôi as string mà vba hiểu a là một variant nó lại cộng búa lua xua đau đầu hơn ấy :D

Nếu quý vị nghĩ rằng + cũng giống như & là nhầm to rồi. Hai toán tử ấy hoạt động khác nhau. Chạy thử code này sẽ biết:
Sub t()
Debug.Print 1 + "1"
Debug.Print 1 & "1"
End Sub
Kết quả
2
11
Cũng đâu lạm dụng dấu + đâu. Lúc nào cả thủ tục toàn xử lý chuỗi thì mới dùng nó cho tiện thôi.
 
Upvote 0
Nếu quý vị nghĩ rằng + cũng giống như & là nhầm to rồi. Hai toán tử ấy hoạt động khác nhau. Chạy thử code này sẽ biết:
Sub t()
Debug.Print 1 + "1"
Debug.Print 1 & "1"
End Sub
Kết quả
2
11
Khi dùng + thì luôn nhớ các phần tử phải cùng một kiểu dữ liệu là được mà anh.

cstr(1) + "1" = 1 & "1"
 
Upvote 0
Khi dùng + thì luôn nhớ các phần tử phải cùng một kiểu dữ liệu là được mà anh.

cstr(1) + "1" = 1 & "1"
Tôi cho rằng nếu tôi không cảnh báo thì người khác đọc bài #9 và #10 sẽ tưởng bở.

Túm lại: phép + không phải là phép nối chuỗi trong VBA. Khi sử dụng, VBA sẽ dựa vào quy luật ép kiểu của phép cộng.
phép & là phép nối chuỗi. Khi sử dụng, VBA luôn luôn ép kiểu sang chuỗi trước khi nối.
 
Upvote 0
Bạn thử hàm nhé:
Rich (BB code):
Function NoiChuoi(SoKyTu As Long, DauPhanCach As String, VungDuLieu As Range) As String
Dim rg As Range, cll As Range
Dim KetQua As String

For Each cll In VungDuLieu
    If Len(Trim(cll)) = SoKyTu Then
        KetQua = KetQua + Trim(cll) + DauPhanCach
    End If
Next
NoiChuoi = Left(KetQua, Len(KetQua) - 1)
End Function
Cảm ơn bạn và các bạn trên GPE đã giúp đỡ.
Bạn ơi hàm chỉ có chọn được 1 vùng giữ liệu.
bạn làm ơn sửa giúp mình là chọn được nhiều vùng giữ liệu khác nhau với nhé.
 
Upvote 0
Cảm ơn bạn và các bạn trên GPE đã giúp đỡ.
Bạn ơi hàm chỉ có chọn được 1 vùng giữ liệu.
bạn làm ơn sửa giúp mình là chọn được nhiều vùng giữ liệu khác nhau với nhé.
Viết như này:
Mã:
=NoiChuoi(3,"-",(D5:D7,E5:E7,G5:G7))
 
Upvote 0
Viết như này:
Mã:
=NoiChuoi(3,"-",(D5:D7,E5:E7,G5:G7))
Bạn có biết cách viết sao cho cú pháp của hàm là NoiChuoi(KyTu,PhanCach,Range1,Range1,Range3,...) không? Nghĩa là n range, thêm bao nhiêu range thì nhận bấy nhiêu. Tôi định viết như thế nhưng không biết cách.
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom