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 thay chỗ dòng kết quả cuối cùng thành:Cảm ơn bạn @Nhattanktnn
Hàm còn một lỗi nữa là khi các ô bị trống thì trả kết quả bị lỗi Value...
Bạn xử lý bỏ qua lỗi này giúp mình là khi không có giữ liệu thì sẽ trả về "No"
Cảm ơn bạn.
Hàm UDF trả về lỗi là cách thức làm việc đúng. Bẫy lỗi là bẻ tréo tay nó.Bạn thay chỗ dòng kết quả cuối cùng thành:
If Len(NoiChuoi) > 0 Then
NoiChuoi = Left(KetQua, Len(KetQua) - Len(DauPhanCach))
Else
NoiChuoi = "Không có." 'Hoặc NO nay gì đó tùy bạn
End If
Em nghĩ nó là thế này: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.
Option Explicit
Function NoiChuoi(SoKyTu As Long, DauPhanCach As String, ParamArray VungDulieu() As Variant) As String
Dim cll As Range, I As Long, KetQua As String, Rng As Range
If UBound(VungDulieu) < 0 Then Exit Function
For I = 0 To UBound(VungDulieu)
If Rng Is Nothing Then
Set Rng = VungDulieu(I)
Else
Set Rng = Union(Rng, VungDulieu(I))
End If
Next
For Each cll In Rng
If Len(Trim(cll)) = SoKyTu Then
KetQua = KetQua + Trim(cll) + DauPhanCach
End If
Next
NoiChuoi = Left(KetQua, Len(KetQua) - 1)
End Function
Tôi đâu có xem code, cũng không hiểu hết yêu cầu của đề bài. Tôi không thể nói thêm về "lỗi không đáng có"Em nghĩ chỗ này cũng do mình thiếu bao quát nên gây lỗi không đáng có. Khi không có kết quả nào trả về thì phải thông báo.
Bác nói như vậy là chuẩn rồi. (Để còn biết được dữ liệu sai hay đúng)Tôi đâu có xem code, cũng không hiểu hết yêu cầu của đề bài. Tôi không thể nói thêm về "lỗi không đáng có"
Những điều tôi nói ở bài #22 chỉ là chung chung. Thường thì người viết hàm phải có chú thích ở đầu hàm về các điều kiện làm việc và các lỗi trả về.
không có kết quả nào trả về: tuỳ theo bạn chủ đích muốn cho nó làm gì. Điển hình hàm Match của Excel nó đâu có thông báo gì. Kiếm không có thì nó "error" thôi.
Tôi đã làm ở bài #21 rồi đó bạn. Chắc bài cấp tập nên không theo kịp?Bác nói như vậy là chuẩn rồi. (Để còn biết được dữ liệu sai hay đúng)
Nhưng đôi khi phải kết hợp hàm khác vào thấy nó khó chịu.
Bạn @Nhattanktnn và các bạn GPE giúp mình thêm điều kiện "Nếu hàm trả lỗi thì ="No") giúp mình với nhé!
Cảm ơn các bạn!
OK. Nay học thêm được cách viết tham số mảng, cảm ơn bạn!Em nghĩ nó là thế này:
Mã:Option Explicit Function NoiChuoi(SoKyTu As Long, DauPhanCach As String, ParamArray VungDulieu() As Variant) As String Dim cll As Range, I As Long, KetQua As String, Rng As Range If UBound(VungDulieu) < 0 Then Exit Function For I = 0 To UBound(VungDulieu) If Rng Is Nothing Then Set Rng = VungDulieu(I) Else Set Rng = Union(Rng, VungDulieu(I)) End If Next For Each cll In Rng If Len(Trim(cll)) = SoKyTu Then KetQua = KetQua + Trim(cll) + DauPhanCach End If Next NoiChuoi = Left(KetQua, Len(KetQua) - 1) End Function