Nếu không trùng INV còn nối lại với nhau nữa, đoạn này em chưa biết phải dùng pivot thế nào bác ạCái này sài pivottable có khi được đó
Là gợi ý theo cách mình nghĩ thôi. Đang dở việc chút. Chưa hỗ trợ ngay được. Chờ thành viên khác xem thế nào. Nếu chưa được hỗ trợ mình sẽ code thử xem thế nào. Nhưng chưa phải lúc nàyNếu không trùng INV còn nối lại với nhau nữa, đoạn này em chưa biết phải dùng pivot thế nào bác ạ
Excel nào bạn. Này có thể dùng power pivot. Viết dax để nối cái cột INV với nhau là được. Thử thêm cái measure này xem sao:Chào các bác,
em đang muốn tổng hợp số lượng theo điều kiện hiển thị
Cụ thể em có gửi ví dụ trong tệp đính kèm và ảnh
Các bác giúp em cái code với nhé, em cảm ơn ạ!
M Code cho thớt tham khảo.Nếu không trùng INV còn nối lại với nhau nữa, đoạn này em chưa biết phải dùng pivot thế nào bác ạ
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ChangedType = Table.TransformColumnTypes(Source,{{"INV", type text}, {"Qty", Int64.Type}, {"CD#", type text}}),
GroupedRows = Table.Group(ChangedType, {"CD#"}, {{"Amount", each List.Sum([Qty])},{"Invoice", each Text.Combine(List.Distinct([INV]),"-")}})
in
GroupedRows
Bạn thử code dưới hên sui.Chào các bác,
em đang muốn tổng hợp số lượng theo điều kiện hiển thị
Cụ thể em có gửi ví dụ trong tệp đính kèm và ảnh
Các bác giúp em cái code với nhé, em cảm ơn ạ!
Sub abc()
Dim i As Long, lr As Long, arr, dic, kq, a As Long, kq1, b As Integer, c As Integer, dk As String
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
lr = .Range("A" & Rows.Count).End(xlUp).Row
arr = .Range("A3:C" & lr).Value
ReDim kq(1 To UBound(arr), 1 To 3)
For i = 1 To UBound(arr)
dk = arr(i, 3) & "#" & arr(i, 1)
If Not dic.exists(dk) Then
a = a + 1
dic.Add dk, a
kq(a, 1) = arr(i, 1)
kq(a, 2) = arr(i, 2)
kq(a, 3) = arr(i, 3)
Else
b = dic.Item(dk)
kq(b, 2) = arr(i, 2) + kq(b, 2)
End If
Next i
ReDim kq1(1 To a, 1 To 3)
For i = 1 To a
dk = kq(i, 3)
If Not dic.exists(dk) Then
c = c + 1
dic.Add dk, c
kq1(c, 1) = kq(i, 1)
kq1(c, 2) = kq(i, 3)
kq1(c, 3) = kq(i, 2)
Else
b = dic.Item(dk)
kq1(b, 1) = kq1(b, 1) & "-" & kq(i, 1)
kq1(b, 3) = kq1(b, 3) + kq(i, 2)
End If
Next i
.Range("J3:L10000").ClearContents
.Range("J3:L3").Resize(c).Value = kq1
End With
Set dic = Nothing
End Sub
Em cảm ơn bác nhiều ạ, cái M code này em còn khá lạ lẫm, e sẽ nghiên cứu thêmM Code cho thớt tham khảo.
Mã:let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], ChangedType = Table.TransformColumnTypes(Source,{{"INV", type text}, {"Qty", Int64.Type}, {"CD#", type text}}), GroupedRows = Table.Group(ChangedType, {"CD#"}, {{"Amount", each List.Sum([Qty])},{"Invoice", each Text.Combine(List.Distinct([INV]),"-")}}) in GroupedRows
Em cảm ơn bác nhiều ạ, kết quả đúng rồi ạBạn thử code dưới hên sui.
Mã:Sub abc() Dim i As Long, lr As Long, arr, dic, kq, a As Long, kq1, b As Integer, c As Integer, dk As String Set dic = CreateObject("scripting.dictionary") With Sheets("sheet1") lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("A3:C" & lr).Value ReDim kq(1 To UBound(arr), 1 To 3) For i = 1 To UBound(arr) dk = arr(i, 3) & "#" & arr(i, 1) If Not dic.exists(dk) Then a = a + 1 dic.Add dk, a kq(a, 1) = arr(i, 1) kq(a, 2) = arr(i, 2) kq(a, 3) = arr(i, 3) Else b = dic.Item(dk) kq(b, 2) = arr(i, 2) + kq(b, 2) End If Next i ReDim kq1(1 To a, 1 To 3) For i = 1 To a dk = kq(i, 3) If Not dic.exists(dk) Then c = c + 1 dic.Add dk, c kq1(c, 1) = kq(i, 1) kq1(c, 2) = kq(i, 3) kq1(c, 3) = kq(i, 2) Else b = dic.Item(dk) kq1(b, 1) = kq1(b, 1) & "-" & kq(i, 1) kq1(b, 3) = kq1(b, 3) + kq(i, 2) End If Next i .Range("J3:L10000").ClearContents .Range("J3:L3").Resize(c).Value = kq1 End With Set dic = Nothing End Sub
Thêm cách khác tham khảoCác bác giúp em cái code với nhé, em cảm ơn ạ!
Sub abc()
Dim d As Object, a(), r(), i&, key, s, k&, tam$
Set d = CreateObject("scripting.dictionary")
With Sheets("Sheet1")
a = .Range("A3:C17").Value
For i = 1 To UBound(a)
d(a(i, 3)) = d(a(i, 3)) & "|" & i
Next
ReDim r(1 To UBound(a), 1 To 3)
For Each key In d.keys
s = Split(d(key), "|")
k = k + 1
r(k, 2) = key
For i = 1 To UBound(s)
If InStr(1, a(s(i), 1), tam) > 0 Then tam = a(s(i), 1) Else tam = tam & "-" & a(s(i), 1)
r(k, 3) = r(k, 3) + a(s(i), 2)
Next
r(k, 1) = tam
tam = Empty
Next
.Range("K3").Resize(k, 3).Value = r
End With
End Sub
cảm ơn bác nhiều ạThêm cách khác tham khảo
Mã:Sub abc() Dim d As Object, a(), r(), i&, key, s, k&, tam$ Set d = CreateObject("scripting.dictionary") With Sheets("Sheet1") a = .Range("A3:C17").Value For i = 1 To UBound(a) d(a(i, 3)) = d(a(i, 3)) & "|" & i Next ReDim r(1 To UBound(a), 1 To 3) For Each key In d.keys s = Split(d(key), "|") k = k + 1 r(k, 2) = key For i = 1 To UBound(s) If InStr(1, a(s(i), 1), tam) > 0 Then tam = a(s(i), 1) Else tam = tam & "-" & a(s(i), 1) r(k, 3) = r(k, 3) + a(s(i), 2) Next r(k, 1) = tam tam = Empty Next .Range("K3").Resize(k, 3).Value = r End With End Sub