
Gửi bởi
mhung12005
Bạn thử file này xem sao.
1> Thứ nhất:
Hàm JoinText mà bạn đang dùng là hàm "đời đầu". Bây giờ đã được cải tiến lại thế này:
Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
Dim aTmp, arr(), Item, tmp As String
Dim i As Long, n As Long
'On Error Resume Next
For i = LBound(Arrays) To UBound(Arrays)
aTmp = Arrays(i)
If Not IsArray(aTmp) Then aTmp = Array(aTmp)
For Each Item In aTmp
If TypeName(Item) <> "Error" Then
tmp = CStr(Item)
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = tmp
End If
Next
Next
If n Then JoinText = Join(arr, Delimiter)
End Function
2> Thứ 2:
Bạn cố tình sửa 1 đoạn trong hàm thành Arr(n) = Right(CStr(Item), Len(CStr(Item)) - 4) ---> Như vậy là phá vỡ tính tổng quát của hàm nên nó chỉ phục vụ duy nhất cho bài này thôi (đây là điều mà tôi không bao giờ thích làm)
------------------
Vậy nếu là tôi thì tôi sẽ dùng version mới nhất. Còn công thức trên bảng tính
Mã:
="Trụ: "&JoinText(", ",TRUE,IF('Dữ liệu'!B4:B13<>"",'Dữ liệu'!A4:A13,""))
Sẽ được sửa thành
Mã:
="Trụ: "&SUBSTITUTE(JoinText(", ",IF('Dữ liệu'!B4:B13<>"",'Dữ liệu'!A4:A13,NA())),"Trụ ","")
hoặc:
Mã:
="Trụ: "&SUBSTITUTE(JoinText(", ",IF(1/('Dữ liệu'!B4:B13<>""),'Dữ liệu'!A4:A13)),"Trụ ","")
Điều này có nghĩa là:
- Hàm vẫn mang tính tổng quát vốn có
- Ai muốn sửa đổi thế nào thì tự xử lý dữ liệu thêm (sửa ở bên ngoài bảng tính bằng các hàm khác chứ không sửa lại code trong hàm)