Lọc dữ liệu trùng trong Excel (1 người xem)

Liên hệ QC

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

Thưa các Thầy và các bạn,
P/S: HÔM NAY ĐƯỢC NGHỈ LÀM NGỒI XEM HƯỚNG DẪN VBA TRÊN YOUTUBE VÀ TRÊN GPE. EM XIN BÁO CÁO CŨNG CHƯA HIỂU ĐƯỢC GÌ NHIÊU
Báo cáo với bạn là trước kia tôi không hiểu bất cứ gì về code VBA. Tôi đưa yêu cầu và mọi người giúp, nếu thấy áp dụng vào công việc thì áp dụng cái đã khoan hãy học. lúc nào rảnh mới lấy ra mổ xẻ, nếu mổ xẻ 1 lần không hiểu tạm thời để đó khi nào có hứng thú thì mổ xẻ tiếp tin chắc là trong khoản thời gian ngắn bạn sẽ hiểu. (Nói chung giải quyết công việc là cái ưu tiên nhất)
Lúc trước tôi cứ lờ tờ mở có khi tôi thấy người ta ghi Range("A1"), có khi ghi cells(1,1), hoặc [A1], hoặc range(cells(1,1),cells(1,1)), hoặc end(1), end(2), end(xlup)... nó cứ lộn xộn tôi nhìn mà không hiểu mục đích để làm gì? rồi từ từ tôi thấy và ngộ nhận ra rằng à thì ra có 1 công việc mà có người viết rõ ràng tường minh, và có người viết tắc theo thứ tự xổ xuống. Sau khi có nội công rồi thì tự bạn có thể phát triển thêm code kiết, và có thể chọn lọc để đọc và tham khảo.
 
CẢM ƠN THẦY ndu96081631, hàm tự tạo của bạn phihndhsp em chưa hiểu lắm, em chuyển vào Macro chèn đoạn giữa (em có bỏ đoạn Function ra rồi ạ) Sub và End Sub em thấy nó đứng im re, bí quá em mới lọc thêm bằng công thức lần nữa, tới đó lại bí tiếp, nên mới hỏi thêm.

Mong Thầy chỉ dạy thêm đoạn code VBA này ạ. Cảm ơn Thầy
tuy rằng gần hết quota nhưng vẫn cố gắng gởi file cho bạn
 

File đính kèm

Cảm ơn bạn phihndhsp nhiều, mình thấy VBA rất hay, mình đang cố gắng học thêm nữa.
 

File đính kèm

Mình có điều này chưa rõ, nhờ bạn phihndhsp giúp đỡ, nếu dãy đầu tiên "DAY 1" bị trống thì làm sao bẫy lỗi bỏ dấu "/" đầu dòng của ô kết quả. Nhờ bạn hướng dẫn giúp ạ.

Cảm ơn bạn phihndhsp nhiều nhé
Bạn xoá đoạn code đó, rồi thay bằng đoạn này
Mã:
 Function DuyNhat(Rng As Range) As String
 Dim Dic As Object
 Dim Cll As Range
 Dim temp As String
 temp = ""
 Set Dic = CreateObject("Scripting.Dictionary")
 For Each Cll In Rng
    If Not Dic.exists(Cll.Value) And Not (IsNull(Cll)) And Trim(Cll.Value) <> "" Then
              Dic.Add Cll.Value, 1
              temp = temp & Cll.Value & "/"
     End If
  Next
  
     If (temp = "/") Then
         DuyNhat = ""
     Else
      DuyNhat = Left(temp, Len(temp) - 2)
     End If
 End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn xoá đoạn code đó, rồi thay bằng đoạn này
Mã:
 Function DuyNhat(Rng As Range) As String
 Dim Dic As Object
 Dim Cll As Range
 Dim temp As String
 temp = ""
 Set Dic = CreateObject("Scripting.Dictionary")
 For Each Cll In Rng
    If Not Dic.exists(Cll.Value) [COLOR=#ff0000]And Not (IsNull(Cll))[/COLOR] And Trim(Cll.Value) <> "" Then
              Dic.Add Cll.Value, 1
              temp = temp & Cll.Value & "/"
     End If
  Next
  
     If (temp = "/") Then
         DuyNhat = ""
     Else
      DuyNhat = Left(temp, Len(temp) - 2)
     End If
 End Function

Chỗ màu đỏ gần như chả có tác dụng gì! Bỏ luôn cũng được
Code này còn phải sửa nhiều mới xong, chẳng hạn với đối số Rng, nếu người dùng chọn vào 1 vùng nào đó có cell bị lỗi thì.. tèo
Ngoài ra tôi thấy lạ: Phi dùng dictionray vậy sao còn nối chuỗi thông thường làm chi (temp = temp & Cll.Value & "/"). Tại sao không dùng Join? (DuyNhat = Join(Dic.Keys, "/")
 
Thưa thầy Tuấn và bạn Phi, do em mới học hỏi thêm VBA, nên còn nhiều câu hỏi dốt đặc xin Thầy và Bạn hướng dẫn thêm ạ.
Công thức tự tạo bị lỗi ạ. Lọc lấy ra dãy cuối luôn bị mất số cuối cùng của dãy này
Công ty em chỉ yêu cầu lọc trùng đến mức như vậy, nhưng em thấy thắc mắc xin hỏi thêm theo như file đính kèm.
Chỗ màu đỏ gần như chả có tác dụng gì! Bỏ luôn cũng được
Code này còn phải sửa nhiều mới xong, chẳng hạn với đối số Rng, nếu người dùng chọn vào 1 vùng nào đó có cell bị lỗi thì.. tèo
Ngoài ra tôi thấy lạ: Phi dùng dictionray vậy sao còn nối chuỗi thông thường làm chi (temp = temp & Cll.Value & "/"). Tại sao không dùng Join? (DuyNhat = Join(Dic.Keys, "/")
=> Thầy có cách nào thêm cho em xin với ạ

Đây là phần em hiểu nhờ Thầy và Bạn chỉ thêm giúp em:
Function DuyNhat(Rng As Range) As String Dim Dic As Object
Dim Cll
As Range
Dim temp
As String

temp
= "" 'vì sao cho temp ="" ở đây ạ?

Set Dic = CreateObject("Scripting.Dictionary") '
Set cái này để lọc dữ liệu trùng phải không ạ?

For
Each Cll In Rng

If Not Dic.exists(Cll.Value) And Not (IsNull(Cll)) And Trim(Cll.Value) <> "" Then
'Em hiểu như vầy có đúng ko ạ: Kiểm tra sự tồn tại của giá trị Cll và giá trị Cll khác 0 và bỏ đi khoảng trắng của giá trị Cll khác rỗng hay không Thì, VẬY KIỂM TRA GIÁ TRỊ Cll TỒN TẠI ĐỂ LÀM GÌ TRONG KHI NÓ HIỆN HỮU TRONG BẢNG TÍNH?

Dic.Add Cll.Value, 1 '
Thêm giá trị Cll vào Key, 1 vào Item.

temp = temp & Cll.Value & "/" ' Trả ra kết quả là rỗng & giá trị Cll & dấu /. VẬY TẠI SAO Ở ĐÂY DẤU / EXCEL HIỂU LÀ CHÈN VÀO GIỮA CÁC GIÁ TRỊ Cll

DuyNhat = Join(Dic.Keys, "/")'
Trả ra kết quả theo code thầy Tuấn, em hiểu như vầy: gom các giá trị Key của Dic chèn vào dấu / phải không ạ?
End If
Next

If (temp = "/") Then 'tại sao có thêm temp ="/" ạ?
DuyNhat = ""
Else

DuyNhat = Left(temp, Len(temp) - 2) '
theo em thấy lấy bên trái dấu "/" thông thường là -1 tại sao ở đây trừ 2 ạ?

End If
End Function

CẢM ƠN THẦY TUẤN VÀ BẠN PHI NHIỀU Ạ.

 

File đính kèm

Lần chỉnh sửa cuối:
Thưa thầy Tuấn và bạn Phi, do em mới học hỏi thêm VBA, nên còn nhiều câu hỏi dốt đặc xin Thầy và Bạn hướng dẫn thêm ạ.
Công thức tự tạo bị lỗi ạ. Lọc lấy ra dãy cuối luôn bị mất số cuối cùng của dãy này
Công ty em chỉ yêu cầu lọc trùng đến mức như vậy, nhưng em thấy thắc mắc xin hỏi thêm theo như file đính kèm.

=> Thầy có cách nào thêm cho em xin với ạ

Đây là phần em hiểu nhờ Thầy và Bạn chỉ thêm giúp em:
Function DuyNhat(Rng As Range) As String Dim Dic As Object
Dim Cll
As Range
Dim temp
As String

temp
= "" 'vì sao cho temp ="" ở đây ạ?

Set Dic = CreateObject("Scripting.Dictionary") '
Set cái này để lọc dữ liệu trùng phải không ạ?

For
Each Cll In Rng

If Not Dic.exists(Cll.Value) And Not (IsNull(Cll)) And Trim(Cll.Value) <> "" Then
'Em hiểu như vầy có đúng ko ạ: Kiểm tra sự tồn tại của giá trị Cll và giá trị Cll khác 0 và bỏ đi khoảng trắng của giá trị Cll khác rỗng hay không Thì, VẬY KIỂM TRA GIÁ TRỊ Cll TỒN TẠI ĐỂ LÀM GÌ TRONG KHI NÓ HIỆN HỮU TRONG BẢNG TÍNH?

Dic.Add Cll.Value, 1 '
Thêm giá trị Cll vào Key, 1 vào Item.

temp = temp & Cll.Value & "/" ' Trả ra kết quả là rỗng & giá trị Cll & dấu /. VẬY TẠI SAO Ở ĐÂY DẤU / EXCEL HIỂU LÀ CHÈN VÀO GIỮA CÁC GIÁ TRỊ Cll

DuyNhat = Join(Dic.Keys, "/")'
Trả ra kết quả theo code thầy Tuấn, em hiểu như vầy: gom các giá trị Key của Dic chèn vào dấu / phải không ạ?
End If
Next

If (temp = "/") Then 'tại sao có thêm temp ="/" ạ?
DuyNhat = ""
Else

DuyNhat = Left(temp, Len(temp) - 2) '
theo em thấy lấy bên trái dấu "/" thông thường là -1 tại sao ở đây trừ 2 ạ?

End If
End Function

CẢM ƠN THẦY TUẤN VÀ BẠN PHI NHIỀU Ạ.

Bạn sửa hàm thành vầy:
Mã:
Function DuyNhat(ByVal VungDuLieu As Range, ByVal PhanCach As String) As String
  Dim dic As Object, arr
  Dim item
  Dim tmp As String
  arr = VungDuLieu.Value
  Set dic = CreateObject("Scripting.Dictionary")
  For Each item In arr
    If TypeName(item) <> "Error" Then ''<--- Loại bỏ giá trị lỗi
      tmp = CStr(item) ''<--- cho giá trị vào biến tạm
      If Len(tmp) Then  ''<--- Nếu chuỗi khác rổng thì đi tiếp
        If Not dic.Exists(tmp) Then dic.Add tmp, "" ''<-- Xét giá trị nếu chưa có trong dic thì mới Add vào
      End If
    End If
  Next
  If dic.Count Then DuyNhat = Join(dic.Keys, PhanCach) ''Nếu có dữ liệu trong Dic thì mới tiến hành nối chuỗi
End Function
Trên bảng tính, tại cell F2 bạn gõ công thức:
Mã:
=DuyNhat(A2:E2,"/")
--------------------
Còn về câu hỏi thứ 2 trong file thì... e rằng phải sửa code rất nhiều mới có kết quả như mong muốn
 
Bạn sửa hàm thành vầy:
Còn về câu hỏi thứ 2 trong file thì... e rằng phải sửa code rất nhiều mới có kết quả như mong muốn

Thưa thầy Tuấn,

Em gặp vấn đề như em đã nêu câu hỏi hôm trước, Chị Sếp mới bên em về bắt em phải lọc bỏ luôn những số trùng trong chuỗi ký tự để cho gọn. Tại em lanh //////, copy paste ngon lành công thức của Thầy, Sếp em tưởng em ngon lành cành đào với excel giờ em còn được ấn thêm cái deadline thứ 6 tuần này phải nộp lại cho Sếp để Sếp thuyết trình tuần sau, nếu Thầy có thời gian Thầy hướng dẫn giải giúp em. Vì Macro e còn ngu quá ạ+-+-+-+. Em cảm ơn Thầy nhiều. Em gởi file đính kèm
 

File đính kèm

Thưa thầy Tuấn,

Em gặp vấn đề như em đã nêu câu hỏi hôm trước, Chị Sếp mới bên em về bắt em phải lọc bỏ luôn những số trùng trong chuỗi ký tự để cho gọn. Tại em lanh //////, copy paste ngon lành công thức của Thầy, Sếp em tưởng em ngon lành cành đào với excel giờ em còn được ấn thêm cái deadline thứ 6 tuần này phải nộp lại cho Sếp để Sếp thuyết trình tuần sau, nếu Thầy có thời gian Thầy hướng dẫn giải giúp em. Vì Macro e còn ngu quá ạ+-+-+-+. Em cảm ơn Thầy nhiều. Em gởi file đính kèm

Câu hỏi hôm trước còn nhiều chỗ phải bàn lại. Chẳng hạn kết quả tại cell F8 là B4472606/L9552/L955236 Tại sao không bỏ L9552? Chẳng phải L9552 cũng trùng với L955236 sao?
 
Câu hỏi hôm trước còn nhiều chỗ phải bàn lại. Chẳng hạn kết quả tại cell F8 là B4472606/L9552/L955236 Tại sao không bỏ L9552? Chẳng phải L9552 cũng trùng với L955236 sao?
Dạ, thưa Thầy, chuỗi này yêu cầu bỏ dữ liệu trùng trước, sau đó bỏ thêm dãy số mà trùng số với dãy chữ số khác. Em xin ví dụ: Ta có chuỗi: B4472606/L9552 / L955236/ L0955236/ 955236 (sau khi đã bỏ dữ liệu trùng), cần kết quả mới là: B4472606/L9552/L955236. Bỏ đi L0955236 và 955236 vì đều có còn số 955236. Không bỏ L9552 vì 9552 chỉ có 4 số, khác với 955326 có đến 6 số ạ. Nếu có gì Thầy chưa hiểu ý em nhờ Thầy chia sẽ và giải giúp em ạ. Em cảm ơn Thầy nhiều ạ.
 
Dạ, thưa Thầy, chuỗi này yêu cầu bỏ dữ liệu trùng trước, sau đó bỏ thêm dãy số mà trùng số với dãy chữ số khác. Em xin ví dụ: Ta có chuỗi: B4472606/L9552 / L955236/ L0955236/ 955236 (sau khi đã bỏ dữ liệu trùng), cần kết quả mới là: B4472606/L9552/L955236. Bỏ đi L0955236 và 955236 vì đều có còn số 955236. Không bỏ L9552 vì 9552 chỉ có 4 số, khác với 955326 có đến 6 số ạ. Nếu có gì Thầy chưa hiểu ý em nhờ Thầy chia sẽ và giải giúp em ạ. Em cảm ơn Thầy nhiều ạ.

Yêu cầu này e rằng tôi.. không biết làm
 
!$@!! Thầy là người thượng thừa về Excel mà bo tay thì em cũng trói tay thôi, theo đề bài như vậy nhờ Thầy cho em thêm hướng giải quyết bài này ạ. Em cảm ơn Thầy
 
Lần chỉnh sửa cuối:
!$@!! Thầy là người thượng thừa về Excel mà bo tay thì em cũng trói tay thôi
Sai rồi! Tôi không làm được thôi chứ GPE này thiếu chi cao thủ, chắc chắn sẽ có người giúp bạn
(Bác Cò, Anh Ba Tê là chuyên gia xử những "ca" khó hiểu thế này đây)
 
Dạ, vậy làm sao em gởi bài này để các Thầy khác giúp đỡ em ạ. Thầy trong bản quản trị nhờ Thầy chuyển bài này giúp em được không ạ? Hay em phải đăng ở mục khác, em cũng sợ đăng nhiều mục quá bị nhắc nhỡ. Cảm ơn Thầy
 
Thử hàm này xem sao. Phước chủ may thầy!
PHP:
Function LocDuyNhat(Rng As Range, Del As String) As String
Dim D1 As Object, D2 As Object, tam()
Dim j As Long, Reg As Object, Mem As String
Set D1 = CreateObject("Scripting.Dictionary")
Set D2 = CreateObject("Scripting.Dictionary")
Set Reg = CreateObject("vbscript.regexp")
Reg.Global = True
Reg.Pattern = "\D"
tam = Rng.Value
For j = 1 To UBound(tam, 2)
   If tam(1, j) <> "" Then
      Mem = Reg.Replace(tam(1, j), "")
      If Not D2.exists(Mem) Then
         If Not D1.exists(Mem) Then
            D1.Add tam(1, j), ""
            D2.Add Mem, ""
         End If
      End If
   End If
Next
LocDuyNhat = Join(D1.keys, Del)
End Function
 
Lần chỉnh sửa cuối:
Chị Sếp mới bên em về bắt em phải lọc bỏ luôn những số trùng trong chuỗi ký tự để cho gọn

Góp một hàm tự tạo, bạn kiểm tra xem thế nào
Mã:
Public Function SoSanh(DL As Range, Dau As String)
Dim i As Long, j As Long, Tam

Tam = DL
With CreateObject("scripting.dictionary")
For i = 1 To UBound(Tam, 2)
If Not .exists(Tam(1, i)) Then
.Add Tam(1, i), ""
End If
Next i
Tam = .keys
End With

With CreateObject("vbscript.regexp")
For i = 0 To UBound(Tam)
.Pattern = "[a-zA-Z]+"
If .test(Tam(i)) = False Then
.Pattern = "\d+"

For j = 0 To UBound(Tam)
If j <> i And .test(Tam(j)) Then
If Val(Tam(i)) = Val(.Execute(Tam(j))(0)) Then
Tam(i) = ""
End If
End If
Next j

End If
Next i
End With

SoSanh = Replace(Application.Trim(Join(Tam, " ")), " ", Dau)
End Function
 

File đính kèm

Sai rồi! Tôi không làm được thôi chứ GPE này thiếu chi cao thủ, chắc chắn sẽ có người giúp bạn
(Bác Cò, Anh Ba Tê là chuyên gia xử những "ca" khó hiểu thế này đây)
Anh quên mất tên em rồi, ẹc. Em cũng thuộc dạng bác sĩ miệt vườn nè. Chuyên mỗ những ca cực kỳ cục cựa. Đa số bệnh nhân đều ngủm củ tỏi.
 
Anh quên mất tên em rồi, ẹc. Em cũng thuộc dạng bác sĩ miệt vườn nè. Chuyên mỗ những ca cực kỳ cục cựa. Đa số bệnh nhân đều ngủm củ tỏi.

Đúng là ca khó muốn "ngủm", thoi thóp thở chút coi, oải thiệt đó.
Giải thích mơ hồ, "vái" trúng.
PHP:
Public Function Hic(Rng As Range) As String
Dim Dic As Object, Tem, I As Long, Num As Long, KQ, J As Long
Set Dic = CreateObject("Scripting.Dictionary")
    Tem = Split(Rng, "/")
    J = -1
    ReDim KQ(UBound(Tem))
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "[A-Z]"
        For I = 0 To UBound(Tem)
            Num = .Replace(Tem(I), "")
            If Not Dic.Exists(Num) Then
                Dic.Add Num, ""
                J = J + 1
                ReDim Preserve KQ(J)
                KQ(J) = Tem(I)
            End If
        Next I
    End With
    Hic = Join(KQ, "/")
Set Dic = Nothing
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn tất cả các thầy đã hỗ trợ nhiệt tình ạ

Dạ trước tiên em xin cảm ơn tất cả các Thầy đã hỗ trợ.

Dựa theo y/c của bài toán thì em áp dụng công thức của các Thầy vào bài toán thì kết quả là của Thầy phuocam và Thầy Ba Tê cho kết quả chính xác ạ.
Em nghĩ, do em chia sẻ yêu cầu của bài toán có 1 vài điểm chưa rõ ràng nên các Thầy khác chưa giải quyết hết y/c thôi. Chứ em phục các Thầy sát đất.

Một lần nữa, xin cảm ơn tất cả các Thầy ạ.
 
Em chào các thầy.
Mong các thầy giúp dùm.Em muốn lọc như sau.Em muốn bắt đầu từ cột E2 (Designation) tới cột E2084.Dữ liệu chỉ được xuất hiện 1 lần không trùng lập.Nếu xuất hiện trùng lập thì xóa luôn cả dòng đi chung tương ứng ví dụ E3 bị trùng thì xóa luôn A3,B3,C3,E3,F3,G3.
Mong các thầy giúp đỡ.
 

File đính kèm

Em chào các thầy.
Mong các thầy giúp dùm.Em muốn lọc như sau.Em muốn bắt đầu từ cột E2 (Designation) tới cột E2084.Dữ liệu chỉ được xuất hiện 1 lần không trùng lập.Nếu xuất hiện trùng lập thì xóa luôn cả dòng đi chung tương ứng ví dụ E3 bị trùng thì xóa luôn A3,B3,C3,E3,F3,G3.
Mong các thầy giúp đỡ.

Dùng công cụ Remove Duplicates (nằm trong tab Data) nhé bạn
 
https://www.fshare.vn/file/WCQB4EEJ75UL
xin các thầy và các anh chỉ giáo cho ạ, em có file này nhưng không biết làm sao loc đc các dữ liệu trùng nhau và ghép thành 1.
Ví dụ có 2 từ Gạo tẻ thì tìm và chỉ cho ra 1 từ, sử dụng bằng hàm hoặc cái gì nhưng miễn sao khi điền từ đó thì nó tự động tìm chứ không phải sử dụng lệnh nhé. Sử dụng lệnh thì chỉ được mỗi lúc mình sử dụng thôi. cần gấp lắm mong mọi người giúp đỡ với ạ
 
nnếu dùng consolidate thì dễ nhưng chỉ đc lúc ấy, chứ nó không tự chạy khi ta thay đổi dữ liệu
 
Cảm ơn cả nhà rất nhiều !

Nhờ cả nhà xem hộ mình cái lỗi này với ???, mình đang cần gấp lắm ...


Loc 2.jpg
 

File đính kèm

cảm ơn các bạn !
Minh gửi các bạn file các cạn giúp mình nhé !

Mình muốn lọc và tính tổng tất cả dữ liệu các cột A, B, C, D, E vào lại với nhau , đoạn code kia có mày chạy vẫn đươc nhưng máy mình thì lại chay ko dc ! các bạn code lại giúp mình với !
 

File đính kèm

cảm ơn các bạn !
Minh gửi các bạn file các cạn giúp mình nhé !

Mình muốn lọc và tính tổng tất cả dữ liệu các cột A, B, C, D, E vào lại với nhau , đoạn code kia có mày chạy vẫn đươc nhưng máy mình thì lại chay ko dc ! các bạn code lại giúp mình với !

Bạn xem file đính kèm,
Rút kinh nghiệm, dòng màu đỏ dưới đây sẽ làm cho bài của bạn không ai trả lời.
Nhờ cả nhà xem hộ mình cái lỗi này với ???, mình đang cần gấp lắm ...
 

File đính kèm

cảm ơn các bạn !
Minh gửi các bạn file các cạn giúp mình nhé !

Mình muốn lọc và tính tổng tất cả dữ liệu các cột A, B, C, D, E vào lại với nhau , đoạn code kia có mày chạy vẫn đươc nhưng máy mình thì lại chay ko dc ! các bạn code lại giúp mình với !
Chạy thử code này:
Mã:
Sub UmBaLa_XiMaChao()
    Dim Dic As Object, I, K, kK, Tam, Kq, Vung
    Set Dic = CreateObject("Scripting.Dictionary")
    Vung = Range([A2], [A50000].End(xlUp)).Resize(, 5)
    ReDim Kq(1 To UBound(Vung), 1 To UBound(Vung, 2))
        For I = 1 To UBound(Vung)
            If Vung(I, 2) <> 0 Then
                Tam = Vung(I, 1) & "@" & Vung(I, 2) & "@" & Vung(I, 3)
                    If Not Dic.exists(Tam) Then
                        K = K + 1
                        Dic.Add Tam, K
                        Kq(K, 1) = Vung(I, 1): Kq(K, 2) = Vung(I, 2): Kq(K, 3) = Vung(I, 3):
                        Kq(K, 4) = Kq(K, 4) + Vung(I, 4): Kq(K, 5) = Kq(K, 5) + Vung(I, 5)
                    Else
                        kK = Dic.Item(Tam)
                        Kq(kK, 4) = Kq(kK, 4) + Vung(I, 4): Kq(kK, 5) = Kq(kK, 5) + Vung(I, 5)
                    End If
              End If
        Next I
   [G2:K100].ClearContents
   [G2].Resize(K, 5) = Kq
End Sub
Code trong bài mà chạy được.....mới lạ. Híc
Thân
 
Chạy thử code này:
Mã:
Sub UmBaLa_XiMaChao()
    Dim Dic As Object, I, K, kK, Tam, Kq, Vung
    Set Dic = CreateObject("Scripting.Dictionary")
    Vung = Range([A2], [A50000].End(xlUp)).Resize(, 5)
    ReDim Kq(1 To UBound(Vung), 1 To UBound(Vung, 2))
        For I = 1 To UBound(Vung)
            If Vung(I, 2) <> 0 Then
                Tam = Vung(I, 1) & "@" & Vung(I, 2) & "@" & Vung(I, 3)
                    If Not Dic.exists(Tam) Then
                        K = K + 1
                        Dic.Add Tam, K
                        Kq(K, 1) = Vung(I, 1): Kq(K, 2) = Vung(I, 2): Kq(K, 3) = Vung(I, 3):
                        Kq(K, 4) = Kq(K, 4) + Vung(I, 4): Kq(K, 5) = Kq(K, 5) + Vung(I, 5)
                    Else
                        kK = Dic.Item(Tam)
                        Kq(kK, 4) = Kq(kK, 4) + Vung(I, 4): Kq(kK, 5) = Kq(kK, 5) + Vung(I, 5)
                    End If
              End If
        Next I
   [G2:K100].ClearContents
   [G2].Resize(K, 5) = Kq
End Sub
Code trong bài mà chạy được.....mới lạ. Híc
Thân

Thầy nào trò nấy, Anh nào em nấy............
Y chang!
Ẹc........
 
Mình đã giải quyết xong rồi . Cảm ơn các bạn nhé !

Còn 1 vần đề nữa

Mình có 1 file dữ liêu ( Trong file đính kèm)

Mình muốn khi mình nhập " x" vào cột kết quả -> thì cả dòng đó sẽ đổi cả màu chữ và màu nền .

Bác nào biết chỉ giúp mình với ..
 

File đính kèm

Mình đã giải quyết xong rồi . Cảm ơn các bạn nhé !

Còn 1 vần đề nữa

Mình có 1 file dữ liêu ( Trong file đính kèm)

Mình muốn khi mình nhập " x" vào cột kết quả -> thì cả dòng đó sẽ đổi cả màu chữ và màu nền .

Bác nào biết chỉ giúp mình với ..
Bạn xem đúng ý chưa.
 

File đính kèm

Gửi các bác!
Tình hình em muốn lọc những thằng có mã trùng nhau ra 1 vùng riêng (các mã trùng nhau và có đầy đủ các trường đi kèm mã trùng đấy)
Em có file sheet All là dữ liệu đầy đủ.
Sheet Bo_Ma_Trung là e thực hiện remove duplicates
Sheet2: Thực hiện Privot table
Tuy nhiên vẫn không đúng theo mục đích được
Nhờ các bác chỉ giùm các lọc riêng những thằng có 1 mã, những thằng lặp nhiều hơn 1 mã (kết quả vẫn đầy đủ các trường có sẵn) hiện tại ở Sheet All
Cám ơn các bác nhiều!
 

File đính kèm

Đã loại bỏ trùng thì sao các trường vẫn còn đầy đủ. Còn chăng chỉ là dòng dữ liệu ứng với mã đầu tiên chứ. Mã của bạn ở đây có phải là Cột Ma không?

Dòng đầu tiên thì có thể lấy lại được đầy đủ 8 cột cho bạn...còn từ dòng trùng thứ 2 trở đi thì đã loại bỏ rồi...làm sao lấy lên cho bạn được...

Nói túm lại: bạn phải nói rõ ràng nhé....
Có nghĩa e muốn lọc những dòng có mã trùng ở Cột Ma ra riêng
 
Các bác cho em hỏi ví dụ cột B là Mã khách hàng, Cột C là ngày nộp tiền. Tại Cột B có nhiều mã khách hàng trùng nhau, tức là một khách hàng nộp tiền nhiều lần. Bây giờ em muốn nhóm theo từng khách hàng để biết các lần nộp tiền của khách hàng là những ngày nào thì làm thế nào ạ?
 
Các bác cho em hỏi ví dụ cột B là Mã khách hàng, Cột C là ngày nộp tiền. Tại Cột B có nhiều mã khách hàng trùng nhau, tức là một khách hàng nộp tiền nhiều lần. Bây giờ em muốn nhóm theo từng khách hàng để biết các lần nộp tiền của khách hàng là những ngày nào thì làm thế nào ạ?
Privot table là được nhé
 
Các bác cho em hỏi ví dụ cột B là Mã khách hàng, Cột C là ngày nộp tiền. Tại Cột B có nhiều mã khách hàng trùng nhau, tức là một khách hàng nộp tiền nhiều lần. Bây giờ em muốn nhóm theo từng khách hàng để biết các lần nộp tiền của khách hàng là những ngày nào thì làm thế nào ạ?
Bạn nên sử dụng PivotTable để tổng hợp.
 
Mình muốn dung công thức, ko dung filter advanced thì có hàm nào các Huynh đệ ơi? giúp mình với nhé, xin đa tạ!
 
Chào anh em GPE,
Mình đã tham khảo các ý kiến trên. Mình muốn hỏi là: mình có 1 bảng dữ liệu trùng lặp. Mình muốn tổng hợp dữ liệu thì bình thường chúng ta remove duplicate, sau đó dùng sumif để tổng hợp dữ liệu. Nhưng khổ nổi là khi update thêm hàng trong cột dữ liệu, ta phải remove duplicate lại. Mọi người có cách nào không, để khi cập nhật thêm hàng thì bảng dữ liệu bên dưới sẽ cập nhật theo mà không dùng pivot table hay VBA. Ưu tiên dùng hàm thôi.
Em thanks ạ
 
Chào anh em GPE,
Mình đã tham khảo các ý kiến trên. Mình muốn hỏi là: mình có 1 bảng dữ liệu trùng lặp. Mình muốn tổng hợp dữ liệu thì bình thường chúng ta remove duplicate, sau đó dùng sumif để tổng hợp dữ liệu. Nhưng khổ nổi là khi update thêm hàng trong cột dữ liệu, ta phải remove duplicate lại. Mọi người có cách nào không, để khi cập nhật thêm hàng thì bảng dữ liệu bên dưới sẽ cập nhật theo mà không dùng pivot table hay VBA. Ưu tiên dùng hàm thôi.
Em thanks ạ

Khoảng trăm dòng dùng hàm cũng được, khoảng ngàn dòng thì dùng Pivot hay VBA.
Không có file thì "cũng như không"
 

File đính kèm

Thánh ăn gì em cúng.
Em cảm ơn ạ!
Mà cho em hỏi "RWS" là cái răng ?
Làm "Người" còn chưa xong, sao dám làm "Thánh".
Mà Thánh cũng biết "Ăn" nữa sao, cứ nghĩ "người cõi trên" chỉ biết hưởng khói nhang thôi chứ!
Bạn ấn Ctrl+F3 sẽ thấy mấy Name trong đó, từ từ "ngâm kiếu" nhé.
 
Lần chỉnh sửa cuối:
E có 1 file chứa dữ liệu e cần sort những người tổng phần trăm của họ dưới 60%
Mong các cao thủ excel giúp e với
Có file đính kèm
 

File đính kèm

Hic!
Muốn xài code VBA mà chỉ xài một chút, còn lại xài công thức???
Vậy thì xài công thức luôn cho lành.
Bạn kiểm xem kết quả của công thức trong sheet No có khác với kết quả bên sheet GPE không. Tôi thì không thấy khác nhau chỗ nào.
Tạm biệt Topic.


Chào anh em GPE,

có cách nào tương tự dùng công thức, ko dung Name, và ra được kết quả như file số bán hang 3 ko?
KHÁCH HÀNG
HUY THỦY
BÀ NGOẠI
O HOAN
TRÚC CƯƠNG
MẸ TOÀN
CHỊ HẢO CÁT
ANH VỊ THOẢN
MỰ HIẾU HƯỚNG
MỰ THÌN SƠN
ÔNG GIANG BẢNG
MỰ TIẾP
TÙNG HUÂN
TUẤN TUYẾT
 
học được một bài thuốc mà đem đi xài nhiều chổ quá (hìhì. ...mới giải bên kia xòng)

vậy nhà số vùng số liệu của bạn A1:A12
nếu ko có cell rổng
=SUMPRODUCT((COUNTIF(A1:A12,A1:A12)>1)/COUNTIF(A1:A12,A1:A12))
nếu có cell rổng
=SUMPRODUCT(((COUNTIF(A1:A12,A1:A12)>1)*(A1:A12<>""))/COUNTIF(A1:A12,A1:A12&""))

ah, sorry...bạn cần lọc ra dach sách chư ko fải là đếm số
cũng vùng số liệu từ A1:A12
D2=INDEX($A$1:$A$12,MATCH(0,INDEX(COUNTIF($D$1:D1,$A$1:$A$12)+(COUNTIF($A$1:$A$12,$A$1:$A$12)=1),),0))
kéo xuống
Mình đang cần công thức này, quá hay, cảm ơn bạn nhiều!
Ko phải lúc nào cũng dùng Remove Duplicates, mà cần dùng công thức..!
 
- Quét chọn vùng dử liệu gốc
- vào menu Data\Filter\ Advanced Filter
- Trong cửa sổ Advanced Filter, chọn mục "Copy to another location"
- Nhấp chuột vào khung "Copy to" rồi dùng chuột chọn 1 cell trên bảng tính, nơi đặt dử liệu sau khi lọc
- Đánh dấu Unique Records Only ---> OK
cao thủ excel bái phục!
 
chào mọi người, nhờ mọi người viết giúp mình đoạn code lọc các giá trị trùng của cột code với điều kiện có sự khác biệt về giá trị của các cột từ cột số 9 trở đi, mỗi dòng là số liệu của một người tương ứng với 1 tháng mình muốn lọc ra ds nhưng người có code trùng có số liệu thay đổi ở bất kỳ cột nào bắt đầu từ cột số 9 cảm ơn mọi người. vì file lớn ko cho úp mình share trên ggle drive mong mọi người thông cảm
https://drive.google.com/drive/folders/1pwMfwm0gRJdhjRwtMauBkkPk8FK6465L?usp=sharing
 
chào mọi người, nhờ mọi người viết giúp mình đoạn code lọc các giá trị trùng của cột code với điều kiện có sự khác biệt về giá trị của các cột từ cột số 9 trở đi, mỗi dòng là số liệu của một người tương ứng với 1 tháng mình muốn lọc ra ds nhưng người có code trùng có số liệu thay đổi ở bất kỳ cột nào bắt đầu từ cột số 9 cảm ơn mọi người. vì file lớn ko cho úp mình share trên ggle drive mong mọi người thông cảm
https://drive.google.com/drive/folders/1pwMfwm0gRJdhjRwtMauBkkPk8FK6465L?usp=sharing
Dữ liệu "oải" thì lấy ít lại chừng vài trăm dòng, vài chục cột, nhưng giải thích là có thể 100.000 dòng, 100 cột ... cho nhẹ file.
PHP:
Public Sub GPE_Loc()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Tem As String
sArr = Sheets("Thang1").Range("A6", Sheets("Thang1").Range("B6").End(xlDown)).Resize(, 100).Value2
R = UBound(sArr): ReDim dArr(1 To R, 1 To 100)
With CreateObject("Scripting.Dictionary")
    For I = 1 To R
        Tem = sArr(I, 2)
        For J = 9 To 100
            Tem = Tem & "#" & sArr(I, J)
        Next J
        If Not .Exists(Tem) Then
            K = K + 1: .Item(Tem) = K
            For J = 1 To 100
                dArr(K, J) = sArr(I, J)
            Next J
        End If
    Next I
End With
Sheets("Filter").Range("A2").Resize(K, 100) = dArr
End Sub
 
Mình cảm ơn bạn Ba Tê đã giúp đỡ mình test thử code của bạn viết rồi nhưng kết quả chưa đúng ý mình có thể do mình viết yêu cầu chưa rõ , ý của mình là chỉ so sánh sự khác biệt cac cột của nhưng mã code trùng thôi còn các mã code khác nhau thi ko cần xử lý vi dụ 20030101 có 13 dòng trung nhau thì so sánh 13 dòng của cột số 9 lần luợt đến cột 90 nếu có thay đỏi iá trị thì copy ra em cảm ơn bạn Ba Tê!
 
Cảm ơn bạn ngọc NguyenNgocThuHien rất nhiều, mình xử lý tạm thủ công theo cách của bạn, vì số liệu thực của mình mỗi code trùng xuất hiện tới 13 lần và số dòng lên tới 23000, cảm oơn bạn nhiều . Noel sắp tới rồi sẵn mình chúc bạn một mùa giáng sinh an lành và gặp nhiều may mắn!
 
Mình cảm ơn bạn Ba Tê đã giúp đỡ mình test thử code của bạn viết rồi nhưng kết quả chưa đúng ý mình có thể do mình viết yêu cầu chưa rõ , ý của mình là chỉ so sánh sự khác biệt cac cột của nhưng mã code trùng thôi còn các mã code khác nhau thi ko cần xử lý vi dụ 20030101 có 13 dòng trung nhau thì so sánh 13 dòng của cột số 9 lần luợt đến cột 90 nếu có thay đỏi iá trị thì copy ra em cảm ơn bạn Ba Tê!
Có thể là yêu cầu không rõ, cũng có thể người đọc không hiểu rõ???
Bạn xem lại kết quả này xem sao.
 

File đính kèm

Kết quả đúng rồi bạn Ba Tê , cảm ơn bạn BaTê nhiều, chúc bạn giáng sinh vui vẻ và năm mới nhièu may mắn!
 
Cảm ơn bạn ngọc NguyenNgocThuHien rất nhiều, mình xử lý tạm thủ công theo cách của bạn, vì số liệu thực của mình mỗi code trùng xuất hiện tới 13 lần và số dòng lên tới 23000, cảm oơn bạn nhiều . Noel sắp tới rồi sẵn mình chúc bạn một mùa giáng sinh an lành và gặp nhiều may mắn!
 

File đính kèm

Cảm ơn bạn NguyenNgocThuHien rất nhiều! cuối tuần vui vẻ nhé!
 

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

Back
Top Bottom