Xin giúp em lọc Dữ liệu nhiều dòng thành 1 dòng bằng công thức

Liên hệ QC

chuotpt3

Thành viên hoạt động
Tham gia
10/5/07
Bài viết
122
Được thích
26
Kính chào cả nhà
Em có file ví dụ đính kèm sau đây, có các cột Mã, Giá, Số lượng, Thành Tiền của Sheet 1
Em muốn lọc bằng công thức, các Mã trùng nhau từ Sheet 1 qua Sheet 2 – Sum Số lượng hàng và Sum Thành Tiền theo Mã này.
Thêm nữa, em cũng muốn khi gõ thêm dòng ở cột Mã Sheet 1 thì Sheet 2 sẽ tự động kiểm tra và nếu là Mã mới thì insert dòng mới này vào Sheet 2 cột Mã ạ.
Việc Sum Số lượng hàng và Sum Thành Tiền thì em không lo – nhưng lọc Dữ liệu giống nhau của cột Mã từ Sheet này qua Sheet kia thì em chưa biết làm thế nào!!!

Kính mong cả nhà giúp em với ạ
Em chân thành cảm ơn
 

File đính kèm

  • Vidu.xlsx
    11 KB · Đọc: 49
Dùng code VBA nha. Copy và paste code sau vào Sheet2. Kích hoạt sheet2 thì tự động code chạy (Kích hoạt có nghĩa là lick qua sheet1, rồi lick lại qua sheet2 thì code có tác dụng. Nói túm lại là Active sheet2 thì code chạy.) Excel trên máy bạn phải được Enable Macro. Và File excel sau khi có code thì phải lưu bằng định dạng đuôi .xlsm hoặc .xlsb thì mới lưu được code VBA
Mã:
Option Explicit
Private Sub Worksheet_Activate()
Dim sArr(), I&, J&, Dic As Object, dArr, K&, Tmp
Application.ScreenUpdating = False
With Sheet1
    sArr = .Range(.[B2], .[B65000].End(3)).Resize(, 4).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 5)
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
    For I = 1 To UBound(sArr, 1)
        Tmp = sArr(I, 1)
        If Not .Exists(Tmp) Then
            K = K + 1
            .Add Tmp, K
                dArr(K, 1) = K
            For J = 1 To UBound(sArr, 2)
                dArr(K, J + 1) = sArr(I, J)
            Next J
        Else
            dArr(.Item(Tmp), 3) = dArr(.Item(Tmp), 3) + sArr(I, 2)
            dArr(.Item(Tmp), 5) = dArr(.Item(Tmp), 5) + sArr(I, 4)
        End If
    Next I
End With
With Sheet2
       .Range("A2:E65000").ClearContents
    If K Then
        .Range("A2").Resize(K, 5).Value = dArr
        .Range("B2").Resize(K, 4).Sort [B1], xlAscending
    End If
End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
 
Kính chào cả nhà
Em có file ví dụ đính kèm sau đây, có các cột Mã, Giá, Số lượng, Thành Tiền của Sheet 1
Em muốn lọc bằng công thức, các Mã trùng nhau từ Sheet 1 qua Sheet 2 – Sum Số lượng hàng và Sum Thành Tiền theo Mã này.
Thêm nữa, em cũng muốn khi gõ thêm dòng ở cột Mã Sheet 1 thì Sheet 2 sẽ tự động kiểm tra và nếu là Mã mới thì insert dòng mới này vào Sheet 2 cột Mã ạ.
Việc Sum Số lượng hàng và Sum Thành Tiền thì em không lo – nhưng lọc Dữ liệu giống nhau của cột Mã từ Sheet này qua Sheet kia thì em chưa biết làm thế nào!!!

Kính mong cả nhà giúp em với ạ
Em chân thành cảm ơn
Tại B2:
Mã:
=IFERROR(INDEX(Sheet1!$B$2:$B$37,MATCH(0,COUNTIF(Sheet2!$B$1:B1,Sheet1!$B$2:$B$35),0),0),"")
Kết thúc công thức ấn tổ hợp phím Ctrl+Shift+Enter
Bạn tìm hiểu pivot tables lọc trùng và tông hợp thì không cần công thức cũng được mà
 
Dạ, em xin cảm ơn anh hpkhuong và đặc biệt chân thành cảm ơn anh comet_1701
Pivot Table thì thực sự không phải là không thể dùng – nhưng vì em chỉ có thể dùng công thức cho "người" này mà thôi nên em không thể làm cách nào khác – kể cả viết VBA!!!!
Hơi khó nói nên đành chịu ạ!!

Em xin cảm ơn hai anh một lần nữa
Em
 
Kính chào cả nhà
Em có file ví dụ đính kèm sau đây, có các cột Mã, Giá, Số lượng, Thành Tiền của Sheet 1
Em muốn lọc bằng công thức, các Mã trùng nhau từ Sheet 1 qua Sheet 2 – Sum Số lượng hàng và Sum Thành Tiền theo Mã này.
Thêm nữa, em cũng muốn khi gõ thêm dòng ở cột Mã Sheet 1 thì Sheet 2 sẽ tự động kiểm tra và nếu là Mã mới thì insert dòng mới này vào Sheet 2 cột Mã ạ.
Việc Sum Số lượng hàng và Sum Thành Tiền thì em không lo – nhưng lọc Dữ liệu giống nhau của cột Mã từ Sheet này qua Sheet kia thì em chưa biết làm thế nào!!!

Kính mong cả nhà giúp em với ạ
Em chân thành cảm ơn
Nếu đơn giản chỉ như vậy thì sao không dùng pivot vừa nhanh lại không cần phải công thức với cốt kiếc gì.

------------------------
Vừa gửi bài thì thấy tác giả trả lời ở bài trên
Bài mình viết thừa quá!
mong ban quản trị xoá giúp.
 
Lần chỉnh sửa cuối:
Dạ, em xin cảm ơn anh hpkhuong và đặc biệt chân thành cảm ơn anh comet_1701
Pivot Table thì thực sự không phải là không thể dùng – nhưng vì em chỉ có thể dùng công thức cho "người" này mà thôi nên em không thể làm cách nào khác – kể cả viết VBA!!!!
Hơi khó nói nên đành chịu ạ!!
Em xin cảm ơn hai anh một lần nữa
Em

Vậy khuyến mại thêm cho bạn công thức không cần Ctrl+Shift+Enter

Mã:
 [/FONT][/SIZE]=IFERROR(INDEX(Sheet1!$B$2:$B$1000,MATCH(0,INDEX(COUNTIF($B$1:B1,Sheet1!$B$2:$B$1000),0),0)),"")

 
Ôi ... khi áp vào 2 Sheet thực tế em làm thì nó không ra đúng kết quả các anh ơi
Có khi nào do hàm Match không ạ?
Để em up file thực tế lên đây luôn (dù em có xóa đi một số nội dung rồi)

Các anh xem giúp em với ạ
Em chân thành cảm ơn
 

File đính kèm

  • Vidu_New.xlsx
    17.9 KB · Đọc: 14
Nếu đơn giản chỉ như vậy thì sao không dùng pivot vừa nhanh lại không cần phải công thức với cốt kiếc gì.

------------------------
Vừa gửi bài thì thấy tác giả trả lời ở bài trên
Bài mình viết thừa quá!
mong ban quản trị xoá giúp.

đâu có thừa gì đâu bạn , có file khác để bạn làm rồi kìa . hi hi
 
Ôi ... khi áp vào 2 Sheet thực tế em làm thì nó không ra đúng kết quả các anh ơi
Có khi nào do hàm Match không ạ?
Để em up file thực tế lên đây luôn (dù em có xóa đi một số nội dung rồi)

Các anh xem giúp em với ạ
Em chân thành cảm ơn
Chắc là do bạn chưa biết tùy biến thôi: (Thử sửa lại như thế này, nhìn sơ sửa đại thôi nha.)
Mã:
=IFERROR(INDEX(Sheet3!$A$4:$A$94,MATCH(0,INDEX(COUNTIF($A$6:A6,Sheet3!$A$4:$A$94),0),0)),"")
 
Dạ em cảm ơn anh giangleloi lắm lắm ạ
Em đã điều chỉnh như anh ghi nhận và thành công rồi anh ạ!!!
 
Mã:
[COLOR=#000000]Option Explicit[/COLOR]Private Sub Worksheet_Activate()
Dim sArr(), I&, J&, Dic As Object, dArr, K&, Tmp [COLOR=#0000ff]'Khai báo biến[/COLOR]
Application.ScreenUpdating = False    [COLOR=#0000ff]'Không cập nhập những thay đổi trên màn hình[/COLOR]
With Sheet1
    sArr = .Range(.[B2], .[B65000].End(3)).Resize(, 4).Value  [COLOR=#0000ff]'gán biến sArr = vùng B2:vùng có dữ liệu. [/COLOR][COLOR=#ff0000]Resize(,4) em chưa hiểu[/COLOR]
End With
ReDim dArr(1 To UBound(sArr), 1 To 5) [COLOR=#ff0000]'đoạn này em chưa hiểu[/COLOR]
Set Dic = CreateObject("Scripting.Dictionary") [COLOR=#0000ff]'gán biến DIC = hàm [FONT=Verdana]CreateObject [/FONT][/COLOR][COLOR=#ff0000][FONT=Verdana](Anh chị chỉ giúp em hàm này dùng làm gì)[/FONT]
[/COLOR]
With Dic
    For I = 1 To UBound(sArr, 1) [COLOR=#0000ff]'Cho I chạy từ 1 tới[/COLOR][COLOR=#ff0000] [FONT=Verdana]UBound(sArr, 1) đoạn này em chưa rõ[/FONT]
[/COLOR]
        Tmp = sArr(I, 1) [COLOR=#ff0000]'[FONT=Verdana]sArr(I, 1) em chưa hiểu[/FONT][/COLOR]

        If Not .Exists(Tmp) Then
            K = K + 1 [COLOR=#ff0000]'chỗ này là tính cho cái gì?[/COLOR]
            .Add Tmp, K
                dArr(K, 1) = K   [COLOR=#ff0000]'[FONT=Verdana]dArr(K, 1)[/FONT][/COLOR]

            For J = 1 To UBound(sArr, 2)
                dArr(K, J + 1) = sArr(I, J)
            Next J
        Else
            dArr(.Item(Tmp), 3) = dArr(.Item(Tmp), 3) + sArr(I, 2)
            dArr(.Item(Tmp), 5) = dArr(.Item(Tmp), 5) + sArr(I, 4)
        End If
    Next I
End With
With Sheet2
       .Range("A2:E65000").ClearContents
    If K Then
        .Range("A2").Resize(K, 5).Value = dArr
        .Range("B2").Resize(K, 4).Sort [B1], xlAscending
    End If
End With
Set Dic = Nothing
Application.ScreenUpdating = True [COLOR=#000000]End Sub[/COLOR]

Em ko hiểu về code nắm, hôm trước Anh hpkhuong viết giúp em code chạy rất tốt. Nhưng Em ngồi xem mãi chưa vỡ ra được, Em mạo muội tìm hiểu về code của Anh hpkhuong mong a cho phép.
Mong A và các bạn có thể chú thích chi tiết phần chữ mầu đỏ ở trên giúp Em. Cám ơn Anh chị!
 
Em ko hiểu về code nắm, hôm trước Anh hpkhuong viết giúp em code chạy rất tốt. Nhưng Em ngồi xem mãi chưa vỡ ra được, Em mạo muội tìm hiểu về code của Anh hpkhuong mong a cho phép.
Mong A và các bạn có thể chú thích chi tiết phần chữ mầu đỏ ở trên giúp Em. Cám ơn Anh chị!
trước khi tìm hiểu code bạn hãy tìm hiểu về nội quy diễn đàn cái đã
bạn đang vi phạm nội quy
 
Web KT
Back
Top Bottom