Trợ giúp về tìm dữ liệu trùng trong excel (1 người xem)

Liên hệ QC

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

vnthesis

Thành viên mới
Tham gia
11/12/10
Bài viết
11
Được thích
2
Mình có 2 cột dữ liệu A và B
Mình muốn xoá dữ liệu trùng cả 2 cột A và B
Chỉ chừa lại dữ liệu không trùng của 2 cột.
anh chị ai biết cách nào thì hướng dẫn nhé

Ví dụ:

Cột A Cột B
10001 10001
10002 10002
10003 10004

Sau khi tìm và xoá dữ liệu trùng.
Kết quả:

Cột A Cột B

10003 10004
 
Mình có 2 cột dữ liệu A và B
Mình muốn xoá dữ liệu trùng cả 2 cột A và B
Chỉ chừa lại dữ liệu không trùng của 2 cột.
anh chị ai biết cách nào thì hướng dẫn nhé

Ví dụ:
Cột A Cột B
10001 10001
10002 10002
10003 10004
Sau khi tìm và xoá dữ liệu trùng.
Kết quả:

Cột A Cột B
10003 10004

Bạn đưa file lên đi. Bạn sẽ có kết quả như ý
 
Dữ liệu test đây bạn nhé

ví dụ file này. bạn chỉ mình cách làm luôn nhé
 

File đính kèm

đúng rồi bạn à.
Nhưng sao mình copy thêm dữ liệu vào 2 cột A và B trong file của bạn thì khi bấm vào xoá trùng nó lại không thực hiện.
Mình có cần phải chỉnh thêm gì ở VBA không hay chỉ cần copy dữ liệu vào 2 cột A - B
 
bạn có thể hướng dẫn cụ thể hơn được không. File của bạn gửi là đúng như ý mình luôn có một điều là khi dữ liệu lớn thì không chạy hoặc nhập tay thì được - copy thì có thể không chạy
 
Nếu dữ liệu trùng 2 cột không nằm ngang hàng nhau thì sao?
Thật ra bài này có thể dùng Advanced Filter để làm ---> Các bạn nghiên cứu xem!

Em có để ý chuyện này. Tuy nhiên do dữ liệu tác giả yêu cầu vậy em mới làm thế.
khi dữ liệu lớn thì không chạy hoặc nhập tay thì được - copy thì có thể không chạy
Bạn đã thử chưa. Code của mình dữ liệu chạy bao nhiêu vẫn được mà. Nếu vậy bạn đưa File dữ liệu đó mình chạy thử xem.
 
Nếu dùng Advanced Filter có cột phụ thì dễ. Nhưng nếu không dùng cột phụ thì.. chưa nghĩ ra
Không phải là cột phụ mà là VÙNG ĐIỀU KIỆN ---> Điều này đương nhiên, hổng có điều kiện thì lọc cái gì (trừ phi lọc duy nhất)
Đại khái thế này đây:
PHP:
Private Function RemoveItem(SrcRng As Range, Criteria As Range) As Range
  Dim tmpRng As Range
  On Error GoTo ExitFunc
  SrcRng.AdvancedFilter 1, Criteria
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.Parent.ShowAllData
  tmpRng.EntireRow.Hidden = True
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.EntireRow.Hidden = False
  Set RemoveItem = tmpRng
ExitFunc:
End Function
PHP:
Sub Main()
  Dim Src1 As Range, Crit1 As Range, Src2 As Range, Crit2 As Range
  Dim Del1 As Range, Del2 As Range
  On Error GoTo ExitSub
  Application.ScreenUpdating = False
  Set Src1 = Range([A1], [A65536].End(xlUp))
  Set Crit1 = Range("IU1:IU2")
  Set Src2 = Range([B1], [B65536].End(xlUp))
  Set Crit2 = Range("IV1:IV2")
  Crit1(2) = "=COUNTIF(" & Src2.Address & ", " & Src1(2, 1).Address(0, 0) & ")=0"
  Crit2(2) = "=COUNTIF(" & Src1.Address & ", " & Src2(2, 1).Address(0, 0) & ")=0"
  Set Del1 = RemoveItem(Src1, Crit1)
  Set Del2 = RemoveItem(Src2, Crit2)
  Del1.Delete 2: Del2.Delete 2
ExitSub:
  Crit1.ClearContents: Crit2.ClearContents
  Application.ScreenUpdating = True
End Sub
Dữ liệu muốn lộn xộn sao cũng được!
 
Muốn xoá dữ liệu trùng trong 2 cột bạn dùng thử code này.
Lưu ý: tùy thuộc vào vị trí của bảng tính bạn phải vào code khai báo lại địa chỉ của ô đầu tiên (chữ màu đỏ - trong ví dụ này là ô B3)

Mã:
Sub Xoa_Trung()
Application.ScreenUpdating = 0
Set SRng = [B][COLOR="red"][SIZE="3"][b3][/SIZE][/COLOR][/B]
EndR = SRng.Resize(1000, 2).SpecialCells(2).Rows.Count + 1
    For i = SRng.Row To EndR + 1
        tmp1 = Application.CountIf(Range(SRng, Cells(i, SRng.Column)), Cells(i, SRng.Column))
        If tmp1 > 1 Then Cells(i, SRng.Column).ClearContents
        tmp1 = ""
        tmp2 = Application.CountIf(Range(SRng, Cells(EndR, SRng.Column + 1)), Cells(i, SRng.Column + 1))
        If tmp2 > 1 Then Cells(i, SRng.Column + 1).ClearContents
        tmp2 = ""
    Next
End Sub
 

File đính kèm

Muốn xoá dữ liệu trùng trong 2 cột bạn dùng thử code này.
Lưu ý: tùy thuộc vào vị trí của bảng tính bạn phải vào code khai báo lại địa chỉ của ô đầu tiên (chữ màu đỏ - trong ví dụ này là ô B3)

Mã:
Sub Xoa_Trung()
Application.ScreenUpdating = 0
Set SRng = [B][COLOR=red][SIZE=3][b3][/SIZE][/COLOR][/B]
EndR = SRng.Resize(1000, 2).SpecialCells(2).Rows.Count + 1
    For i = SRng.Row To EndR + 1
        tmp1 = Application.CountIf(Range(SRng, Cells(i, SRng.Column)), Cells(i, SRng.Column))
        If tmp1 > 1 Then Cells(i, SRng.Column).ClearContents
        tmp1 = ""
        tmp2 = Application.CountIf(Range(SRng, Cells(EndR, SRng.Column + 1)), Cells(i, SRng.Column + 1))
        If tmp2 > 1 Then Cells(i, SRng.Column + 1).ClearContents
        tmp2 = ""
    Next
End Sub
- Giả sử giá trị "a" nằm ở cả 2 cột A và B
- Anh dùng code duyệt trong cột A, và thấy rằng giá trị "
a" này có tồn tại trong cột B ---> Thế là anh xóa nó đi
- Tiếp theo. anh dùng code duyệt trong cột B thì chắc chắc anh sẽ không phát hiện được giá trị "
a" này đã từng tồn tại ở cột A (vì trước đó anh đã xóa nó rồi)
-------------
Ý của tác giả là: Cứ có trùng là xóa ở cả 2 cột anh à! ---> Vì lẻ đó, nếu ta phát hiện "trùng" thì không được xóa ngay mà chỉ "đánh dấu" thôi ---> Khi chạy xong code mới xóa luôn 1 lần
 
nếu ta phát hiện "trùng" thì không được xóa ngay mà chỉ "đánh dấu" thôi ---> Khi chạy xong code mới xóa luôn 1 lần


Cách này mình đã từng nghe nhưng chưa biết viết code. Ndu viết cho mình xin một ví dụ nha. Xin cảm ơn trước !
 
Cách này mình đã từng nghe nhưng chưa biết viết code. Ndu viết cho mình xin một ví dụ nha. Xin cảm ơn trước !
Bài #10 em dùng Advanced Filter đấy anh! Khi lọc đúng điều kiện, em ghi nhớ bằng cách định vị Range ---> Cuối cùng mới xóa 1 lần
Còn nếu anh dùng vòng lập thì khi phát hiện trùng, anh dùng Union để thu gom thôi
 
Chỉ cần học được phần nào cách định vị Range, gom, Dic... của sư phụ là có thể giải quyết được rất nhiều vấn đề rồi.
 
Thưa sư phụ SpecialCells(12) trong Code này
PHP:
Private Function RemoveItem(SrcRng As Range, Criteria As Range) As Range
  Dim tmpRng As Range
  On Error GoTo ExitFunc
  SrcRng.AdvancedFilter 1, Criteria
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.Parent.ShowAllData
  tmpRng.EntireRow.Hidden = True
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.EntireRow.Hidden = False
  Set RemoveItem = tmpRng
ExitFunc:
End Function

có nghĩa là gì ah, em đọc mãi mà không thông.
 
Thưa sư phụ SpecialCells(12) trong Code này
PHP:
Private Function RemoveItem(SrcRng As Range, Criteria As Range) As Range
  Dim tmpRng As Range
  On Error GoTo ExitFunc
  SrcRng.AdvancedFilter 1, Criteria
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.Parent.ShowAllData
  tmpRng.EntireRow.Hidden = True
  Set tmpRng = SrcRng.SpecialCells(12)
  SrcRng.EntireRow.Hidden = False
  Set RemoveItem = tmpRng
ExitFunc:
End Function

có nghĩa là gì ah, em đọc mãi mà không thông.
SpecialCells(12) <===> SpecialCells(xlCellTypeVisible) nghĩa là chọn những cell không ẩn
Cũng tương đương với việc chọn dữ liệu, bấm Ctrl + G\Special và check mục Visible cells only
 
Em thấy trong VBA có rất nhiều cụm từ bắt đầu bằng xl ví dụ: xlCellTypeVisible, xlCellTypeBlanks, xlAnd, em tò mò muốn biết xl là viết tắt của cụm từ gì đó ah.
 
Em thấy trong VBA có rất nhiều cụm từ bắt đầu bằng xl ví dụ: xlCellTypeVisible, xlCellTypeBlanks, xlAnd, em tò mò muốn biết xl là viết tắt của cụm từ gì đó ah.
Tôi đoán đây là những hằng số của riêng Excel, nói đến xl, biết ngay là Excel
Bạn cũng từng thấy các hằng số bằt đầu bằng chữ vb (ví dụ vbTab, vbLf...)... đó là các hằng số của VB... Hoặc với Word thì các hằng số sẽ bắt đầu bằng chữ wd
 
ví dụ file này. bạn chỉ mình cách làm luôn nhé

Bạn có thể xem hình đính kèm và làm trực tiếp
bước 1. Nhập công thức và ô C2: =1/(A2<>B2) và chép xuống. Hàng nào có cột A bằng cột B thì kết quả là lỗi
bước 2. Chọn dữ liệu trên cột C, gõ Ctrl - G, chọn Speacial. bạn chọn như hình 1 đã chỉ ra.
bước 3. Gõ Ctrl - - (dấu trừ) và chọn trên hộp thoại Delete như hình 2.

Tất nhiên là các sư phụ đã macro hay rồi.
Nêu ra cách này nếu bạn làm ít. Và cũng để thấy cái hay của Excel.
 

File đính kèm

  • h1.GIF
    h1.GIF
    46.1 KB · Đọc: 4
  • h2.GIF
    h2.GIF
    37.1 KB · Đọc: 5
Web KT

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

Back
Top Bottom