Giúp mình ghép chuối theo điều kiện!
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 ạ!
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:
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
2> Áp dụng trên bảng tính:
Công thức tại F4:
=JoinIf([COLOR=#ff0000]""[/COLOR],$B$4:$B$12,B4,$D$4:$D$12)
kéo fill xuống. Xong!
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:
=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
www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-m%C3%ACnh-gh%C3%A9p-chu%E1%BB%91i-theo-%C4%91i%E1%BB%81u-ki%E1%BB%87n.108084/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Dùng cột phụ, bạn xem file đính kèm
Bài toán này mình viết bằng 1 đoạn Sub, bạn xóa thử cột F đi rồi bấm chạy Code để chạy thử xem có OK không nghen
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)
CT của bạn rất hay và sáng tạo, mình gọi là chỉ đi học hỏi lại và chế biến lại đôi chút cho ngắn gọn thôi chứ nói về ý tưởng thì nó hoàn
toàn là của bạn :-=
Bạn xem thử File xem được chưa
Hi hi ! Em vẫn còn kém lắm, mới gọi là chỉ biết một vài cái sơ đẳng nhất của VBA thôi, vần còn phải rèn luyện cũng như học hỏi nhiều
từ các thành viên khác của GPE ạ
Thêm một cách dùng công thức
Đại khái là
($b$4:$b$14=b4) sẽ tạo 1 mảng mới, cái nào =b4 thì trong mảng mới =1 và ngược lại
row($b$4:$b$14) là mảng chỉ số dòng tương ứng
($b$4:$b$14=b4)*row($b$4:$b$14) là tích các phần tử tương ứng của 2 mảng với nhau. Hàm max lấy giá trị của mảng tích này
—
Bạn có thể sửa dấu * thành dấu "," sau đó nhấn shift+F3—>Nhấn chuột vào hàm MAX trên thanh formula để xem
—
Làm xong mới thấy bài 15 đã giải thích rồi, có lẽ để lại để chủ thớt đọc chơi vậy!