Thiên Thanh1
Thành viên mới
- Tham gia
- 16/10/20
- Bài viết
- 36
- Được thích
- 9
Bạn thử hàm nhé:Nhờ anh chị viết giúp hàm VBA như file đính kèm
Cảm ơn các anh chị.
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?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
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.À 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à & )
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 ấygõ 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
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.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.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
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ở.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"
Cảm ơn bạn và các bạn trên GPE đã giúp đỡ.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
Viết như này: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é.
=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.Viết như này:
Mã:=NoiChuoi(3,"-",(D5:D7,E5:E7,G5:G7))
Cảm ơn bạn @NhattanktnnViết như này:
Mã:=NoiChuoi(3,"-",(D5:D7,E5:E7,G5:G7))