Lọc dữ liệu theo hai cột không trùng, theo điều kiện và tính tổng (2 người xem)

Người dùng đang xem chủ đề này

boydaigai

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
8/9/11
Bài viết
58
Được thích
12
E có ghi rõ trong file đính kèm . Đại khái là có 2 cột có trùng dữ liệu với nhau thì lọc ra lấy 1 thôi và tính tổng số tiền những cái trùng đó (cột số tiền khác hai cột này)+-+-+-++-+-+-++-+-+-+
 

File đính kèm

E có ghi rõ trong file đính kèm . Đại khái là có 2 cột có trùng dữ liệu với nhau thì lọc ra lấy 1 thôi và tính tổng số tiền những cái trùng đó (cột số tiền khác hai cột này)+-+-+-++-+-+-++-+-+-+

he, cái nick bạn hay đó..........sao giống tui vậy....hehehe
thêm dicionary vào
Mã:
Option Explicit

Sub test()
Dim arr(), kq(), i, j, sp, dic As Object
S2.Range("F7:H16").ClearContents
S2.Range("F7:H16").EntireRow.Hidden = False
arr = S1.Range("A3:O" & S1.Range("A65000").End(3).Row).Value
Set dic = CreateObject("Scripting.Dictionary")
ReDim kq(1 To 10, 1 To 3)

sp = S2.Range("G6").Value
For i = 1 To UBound(arr)
   If arr(i, 2) = sp Then
   If Not dic.exists(arr(i, 8)) Then
   j = j + 1
    dic.Add arr(i, 8), j
     kq(j, 1) = "N" & arr(i, 8)
     kq(j, 2) = "C" & arr(i, 10)
     kq(j, 3) = arr(i, 15)
    Else
     kq(dic.Item(arr(i, 8)), 3) = kq(dic.Item(arr(i, 8)), 3) + arr(i, 15)
   End If
   End If
   
Next i

If j Then S2.Range("F7").Resize(j, 3) = kq
Erase kq(), arr()
Set dic = Nothing
End Sub
 
Upvote 0
Tuyệt quá, e cảm ơn /-*+//-*+//-*+/
 
Upvote 0
Ở bài này dữ liệu một cột J của e là trùng hết từ trên xuống dưới , nếu dữ liệu không thế thì phải làm sao ạ %#^#$%#^#$%#^#$%#^#$ (ví dụ cột J lòi ra một vài cái 1112 ).

Ngoài lề : dùng advance filter có tính tổng đc dữ liệu trùng ko ạ ?
 
Upvote 0
Ở bài này dữ liệu một cột J của e là trùng hết từ trên xuống dưới , nếu dữ liệu không thế thì phải làm sao ạ %#^#$%#^#$%#^#$%#^#$ (ví dụ cột J lòi ra một vài cái 1112 ).

Ngoài lề : dùng advance filter có tính tổng đc dữ liệu trùng ko ạ ?

thì bạn cho ví dụ vào đi, kết quả xuất ra như thế nào
nếu là dân kế toán thì chắc hiểu được (tại tui ko có nghề.............hihhihihi)

advanced filter có thể sử dụng trong trường hợp này
tuy nhiên phản viết cho khéo vì nó có thể ko phân biệt được 111 và 1112
 
Lần chỉnh sửa cuối:
Upvote 0
E đính kèm ví dụ rồi ạ

Đại loại là hai cột đồng thời trùng
A B
A B
C D
E F
E F
A D
A D
A D
A D

thì lọc ra :
A B
C D
E F
A D
 

File đính kèm

Upvote 0
E đính kèm ví dụ rồi ạ

Đại loại là hai cột đồng thời trùng
A B
A B
C D
E F
E F
A D
A D
A D
A D

thì lọc ra :
A B
C D
E F
A D

Ngứa nghề quá nên chọt vô cái coi
PHP:
Sub loc()
Dim data(), Res(1 To 10, 1 To 3)
Dim dk$, i&, n&, k&, tem$
dk = S2.[G6].Value
data = S1.Range("B3", S1.[O65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If data(i, 1) = dk Then
         tem = data(i, 7) & data(i, 9)
         If Not .exists(tem) Then
            k = k + 1
            .Add tem, k
            Res(k, 1) = "N" & data(i, 7)
            Res(k, 2) = "C" & data(i, 9)
            Res(k, 3) = data(i, 14)
         Else
            n = .Item(tem)
            Res(n, 3) = Res(n, 3) + data(i, 14)
         End If
      End If
   Next
End With
S2.Range("F7").Resize(10, 3) = Res
End Sub
 
Upvote 0
Cháu cảm ơn chú hì hì
Dic bá đạo thật, nhận được cả kiểu : data(i, 7) & data(i, 9) +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom