nguyentaiphat
Thành viên mới
- Tham gia
- 6/10/21
- Bài viết
- 3
- Được thích
- 0
Cảm ơn ad nhiều nhé !!! <3Bỏ mấy cái Merge bên sheet1 đi rồi Pivot thôi.
bạn thử file. Kết quả trả về đang để ở F14: ... để bạn để bạn dễ đối chiếuTình hình là e muốn tổng hợp tất cả mặt hàng từ nhiều đơn hàng vào 1 bảng để kiểm soát xuất hàng.
Mẫu trong file đính kèm ạ, (em muốn chuyển từ sheet 1 ---> sheet 2).
Mong các cao nhân giúp e !!!
Sub TONGHOP()
Dim Arr(), KQ(), TieuDe()
Dim I&, J&, k&, t&, R&, Lr&
Dim DK, DK2, Dic As Object
With Sheet1
Lr = .Cells(Rows.Count, 2).End(xlUp).Row
Arr = .Range("A2:C" & Lr).Value
R = UBound(Arr)
ReDim TieuDe(1 To 1, 1 To Lr)
Set Dic = CreateObject("Scripting.Dictionary")
For I = 1 To Lr - 1
If Arr(I, 2) <> "" Then DK2 = Trim(Arr(I, 2))
If Not Dic.Exists(DK2) Then
k = k + 1
Dic.Add (DK2), k
TieuDe(1, k) = DK2
End If
Next I
ReDim KQ(1 To R, 1 To k + 1)
For I = 1 To R
If Arr(I, 1) <> "" Then DK = Arr(I, 1)
If Not Dic.Exists(DK) Then
t = t + 1
Dic.Add (DK), t
KQ(t, 1) = DK
End If
Next I
Dim Rng As Range
Set Rng = .Range("A1:A" & Lr)
On Error Resume Next
For J = 1 To UBound(KQ)
dong = Rng.Find(KQ(J, 1)).Row
If KQ(J + 1, 1) <> "" Then
dongcuoi = Rng.Find(KQ(J + 1, 1)).Row - 1
Else
dongcuoi = Lr
End If
For Z = dong To dongcuoi
keys = Arr(Z - 1, 2)
If Dic.Exists(keys) Then
KQ(J, Dic.Item(keys) + 1) = Arr(Z - 1, 3)
End If
Next Z
Next J
End With
Sheet2.[F15].Resize(t, k + 1) = KQ
Sheet2.[G14].Resize(1, k) = TieuDe
MsgBox "Xong"
End Sub
cảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn. (bạn thử file. Kết quả trả về đang để ở F14: ... để bạn để bạn dễ đối chiếu
riêng dòng tổng cộng bạn tự làm nhé. nếu đúng sai xin cho phản hồi.
Mã:Sub TONGHOP() Dim Arr(), KQ(), TieuDe() Dim I&, J&, k&, t&, R&, Lr& Dim DK, DK2, Dic As Object With Sheet1 Lr = .Cells(Rows.Count, 2).End(xlUp).Row Arr = .Range("A2:C" & Lr).Value R = UBound(Arr) ReDim TieuDe(1 To 1, 1 To Lr) Set Dic = CreateObject("Scripting.Dictionary") For I = 1 To Lr - 1 If Arr(I, 2) <> "" Then DK2 = Trim(Arr(I, 2)) If Not Dic.Exists(DK2) Then k = k + 1 Dic.Add (DK2), k TieuDe(1, k) = DK2 End If Next I ReDim KQ(1 To R, 1 To k + 1) For I = 1 To R If Arr(I, 1) <> "" Then DK = Arr(I, 1) If Not Dic.Exists(DK) Then t = t + 1 Dic.Add (DK), t KQ(t, 1) = DK End If Next I Dim Rng As Range Set Rng = .Range("A1:A" & Lr) On Error Resume Next For J = 1 To UBound(KQ) dong = Rng.Find(KQ(J, 1)).Row If KQ(J + 1, 1) <> "" Then dongcuoi = Rng.Find(KQ(J + 1, 1)).Row - 1 Else dongcuoi = Lr End If For Z = dong To dongcuoi keys = Arr(Z - 1, 2) If Dic.Exists(keys) Then KQ(J, Dic.Item(keys) + 1) = Arr(Z - 1, 3) End If Next Z Next J End With Sheet2.[F15].Resize(t, k + 1) = KQ Sheet2.[G14].Resize(1, k) = TieuDe MsgBox "Xong" End Sub
Ad đâu mà ad. Bạn đó là super mod đócảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn. (
Trong file đính kèm mình gửi bạn, Bạn có trông thấy cái nút màu xanh ở chỗ ô D7,E7 không? nhấn vào đó và xem kết quả (lưu ý trước khi nhấn hãy xóa bỏ vùng từ F14 đến R22 ).cảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn. (