D1: điền chữ DK
D2: =AND(COUNTIF($B$3:$B$12,B3)>1,COUNTIFS($B$3:$B$12,B3,$C$3:$C$12,C3,$D$3:$D$12,D3)=1)
Dạ anh ơi em làm ko được gặp lỗi "The extract range há a mising ỏ invalid field name". Xin anh chỉ rõ hơn đc ko ạ!Bạn có thể sử dụng Advance filter cho trường hợp này - code thì record tương tự.
Các bước:
- B1: Tại sheet2
Mã:D1: điền chữ DK D2: =AND(COUNTIF($B$3:$B$12,B3)>1,COUNTIFS($B$3:$B$12,B3,$C$3:$C$12,C3,$D$3:$D$12,D3)=1)
- B2: Copy tiêu đề cần hiển thị thông tin trên sheet3 (thứ tự nào cũng được) và đặt chuột active tại sheet 3
- B3: Tại sheet3 chọn advance filter với vùng dữ liệu là data của bạn, vùng điều kiện là D12 vừa tạo, vùng kết quả là tiêu đề bạn vừa copy
- B4: Bấm Ok để thấy kết quả.
Bạn ghi macro thì coi như xong code![]()
Như tiêu đề.
Nhờ anh/chị viết giùm 1 đoạn code theo nội dung trong file đính kèm ạ
Option Explicit
Sub test()
Dim data, kq(1 To 6000, 1 To 3), itm As Variant
Dim d As Object
Dim i, j, k As Long
data = Sheet2.[b3:d6000]
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(data)
If data(i, 1) = "" Then Exit For
If Not d.exists(data(i, 1)) Then
d.Add data(i, 1), Array(i, data(i, 2))
Else
itm = d.Item(data(i, 1))
If InStr(1, itm(1), data(i, 2)) = 0 Then
If Len(itm(0)) = 1 Then
k = k + 2
For j = 1 To 3
kq(k - 1, j) = data(itm(0), j)
kq(k, j) = data(i, j)
Next
Else
k = k + 1
For j = 1 To 3
kq(k, j) = data(i, j)
Next
End If
d.Item(data(i, 1)) = Array(itm(0) & i, itm(1) & data(i, 2))
End If
End If
Next
If k Then
With Sheet3
.[e3:g6000].ClearContents
.[e2].Resize(k, 3) = kq
End With
End If
End Sub