nguyendinhvinh0410
Thành viên mới

- Tham gia
- 8/5/13
- Bài viết
- 25
- Được thích
- 0
Chào các Pro! xin giúp mình với, mình muốn ghép các chuỗi theo điều kiện.
Ví dụ (có đính kèm file) giúp nhé các Pro cần gấp lắm ạ!
Chào các Pro! xin giúp mình với, mình muốn ghép các chuỗi theo điều kiện.
Ví dụ (có đính kèm file) giúp nhé các Pro cần gấp lắm ạ!
Dùng cột phụ, bạn xem file đính kèm
Mình gặp một vấn đề nữa là kết quả ghép đôi theo điều kiện bị trùng. Ví dụ: con đường A có bốn đoạn theo kết cấu là: đoạn 1 bê tông; đoạn 2 đất; đoạn 3 bê tông; đoạn 4 đất. Vậy khi mình ghép chuỗi theo con đường A thì kết quả là: bê tôngđấtbê tôngđât. Các pro giúp mình rút gọn cụm kết cấu trên thành "bê tôngđất". Cám ơn!
CT của bạn chuẩn rồi ạ, tuy nhiên ở cột phụ có thể rút ngắn thành thế này cũng được : D4 =IF(B4<>B3,C4,D3&C4)
Trước có làm một bài tương tự nhưng dữ liệu tại cột "STT" không liên tục nên áp dụng công thức trên. Giờ bổn cũ soạn lại không nhìn thấy rõ là số liệu liên tục.
Thank!
Xin giúp rút gọn kết quả trùng lặp ạ (file đính kèm)
Xin giúp rút gọn kết quả trùng lặp ạ (file đính kèm)
sumproduct(max(($b$4:$b$14=b4)*row($b$4:$b$14))) bác ơi giải thích dùm ạ!dùng cột phụ, bạn xem file đính kèm
Bạn xem thử File xem được chưa
gop = gop & Cells(j, 4)
gop = gop & " " & Cells(j, 4)
Dạo này trình VBA lên rồi đấy,hii.
Bạn có thể thay dòng:
PHP:gop = gop & Cells(j, 4)
Bằng dòng:
PHP:gop = gop & " " & Cells(j, 4)
?
sumproduct(max(($b$4:$b$14=b4)*row($b$4:$b$14))) bác ơi giải thích dùm ạ!
Đại khái làsumproduct(max(($b$4:$b$14=b4)*row($b$4:$b$14))) bác ơi giải thích dùm ạ!
sumproduct(max(($b$4:$b$14=b4)*row($b$4:$b$14))) bác ơi giải thích dùm ạ!
Xin giúp rút gọn kết quả trùng lặp ạ (file đính kèm)
Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String
Dim aTmpCrit, aTmpDes, tmp1, tmp2, arr(), dic As Object
Dim bComp As Boolean, Chk As Boolean
Dim i As Long, j As Long, k As Long, dTmpVal As Double
Set dic = CreateObject("Scripting.Dictionary")
If IsMissing(TargetArray) Then TargetArray = CriteriaArray
aTmpCrit = ConvertTo1DArray(CriteriaArray)
aTmpDes = ConvertTo1DArray(TargetArray)
If (Not IsArray(aTmpCrit)) Or (Not IsArray(aTmpDes)) Then Exit Function
On Error Resume Next
bComp = (InStr("<>=", Left(Criteria, 1)) > 0)
For i = LBound(aTmpDes) To UBound(aTmpDes)
tmp1 = aTmpCrit(i): tmp2 = aTmpDes(i)
If TypeName(tmp1) <> "Error" Then
If TypeName(tmp2) <> "Error" Then
If bComp And Len(Criteria) Then
dTmpVal = CDbl(aTmpCrit(i))
If Evaluate(dTmpVal & Criteria) Then dic.Add tmp2, ""
Else
If (Left(Criteria, 1) = "!") Then
If Not (UCase(tmp1) Like UCase(Mid(Criteria, 2, Len(Criteria)))) Then dic.Add tmp2, ""
Else
If (UCase(tmp1) Like UCase(Criteria)) Then dic.Add tmp2, ""
End If
End If
End If
End If
Next
If dic.Count Then
arr = dic.Keys
JoinIf = Join(arr, Delimiter)
End If
End Function
Private Function ConvertTo1DArray(ByVal SourceArray)
Dim aTmp, Item, arr()
Dim n As Long
On Error Resume Next
aTmp = SourceArray
If Not IsArray(aTmp) Then aTmp = Array(aTmp)
For Each Item In aTmp
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = Item
Next
ConvertTo1DArray = arr
End Function
=JoinIf([COLOR=#ff0000]""[/COLOR],$B$4:$B$12,B4,$D$4:$D$12)
=JoinIf([COLOR=#ff0000]"-"[/COLOR],$B$4:$B$12,B4,$D$4:$D$12)
Mong các bác giải thích giúp đoạn hàm này ạ, mặc dù có nghiên cứu nghiêm túc nhưng không hiểu được ạ.
F4=indirect("e"&sumproduct(max(($b$4:$b$12=b4)*row($b$4:$b$12))))
Bác cho em xin bộ hàm: JoinText, JoinUnique và JoinIf cám ơn ạ nếu có hướng dẫn càng tốt ạ!Lúc trước tôi có viết bộ hàm: JoinText, JoinUnique và JoinIf
Với yêu cầu này, thích hợp dùng JoinIf như sau:
1> Code VBA:
2> Áp dụng trên bảng tính:Mã:Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String Dim aTmpCrit, aTmpDes, tmp1, tmp2, arr(), dic As Object Dim bComp As Boolean, Chk As Boolean Dim i As Long, j As Long, k As Long, dTmpVal As Double Set dic = CreateObject("Scripting.Dictionary") If IsMissing(TargetArray) Then TargetArray = CriteriaArray aTmpCrit = ConvertTo1DArray(CriteriaArray) aTmpDes = ConvertTo1DArray(TargetArray) If (Not IsArray(aTmpCrit)) Or (Not IsArray(aTmpDes)) Then Exit Function On Error Resume Next bComp = (InStr("<>=", Left(Criteria, 1)) > 0) For i = LBound(aTmpDes) To UBound(aTmpDes) tmp1 = aTmpCrit(i): tmp2 = aTmpDes(i) If TypeName(tmp1) <> "Error" Then If TypeName(tmp2) <> "Error" Then If bComp And Len(Criteria) Then dTmpVal = CDbl(aTmpCrit(i)) If Evaluate(dTmpVal & Criteria) Then dic.Add tmp2, "" Else If (Left(Criteria, 1) = "!") Then If Not (UCase(tmp1) Like UCase(Mid(Criteria, 2, Len(Criteria)))) Then dic.Add tmp2, "" Else If (UCase(tmp1) Like UCase(Criteria)) Then dic.Add tmp2, "" End If End If End If End If Next If dic.Count Then arr = dic.Keys JoinIf = Join(arr, Delimiter) End If End Function Private Function ConvertTo1DArray(ByVal SourceArray) Dim aTmp, Item, arr() Dim n As Long On Error Resume Next aTmp = SourceArray If Not IsArray(aTmp) Then aTmp = Array(aTmp) For Each Item In aTmp n = n + 1 ReDim Preserve arr(1 To n) arr(n) = Item Next ConvertTo1DArray = arr End Function
Công thức tại F4:
kéo fill xuống. Xong!Mã:=JoinIf([COLOR=#ff0000]""[/COLOR],$B$4:$B$12,B4,$D$4:$D$12)
Lưu ý: cái dấu "" màu đỏ trong công thức chính là dấu phân cách. Nếu bạn muốn phần từ này cách phần tử kia bằng dấu phân cách nào đó, hãy thay đổi cho phù hợp. Chẳng hạn muốn dấu phân cách là dấu "-" ta sửa công thức thành:
--------------------Mã:=JoinIf([COLOR=#ff0000]"-"[/COLOR],$B$4:$B$12,B4,$D$4:$D$12)
Nói thêm: Cách sử dụng hàm JoinIf gần giống như SUMIF
Bác cho em xin bộ hàm: JoinText, JoinUnique và JoinIf cám ơn ạ nếu có hướng dẫn càng tốt ạ!