Hỏi dòn dòng lên khi có dữ liệu trùng!! (1 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các a(c) trong GPE, e có dữ liệu như sau:
2014-07-07_15-40-32.jpg
chú thích: cột C có tên "CCC", cột G có tên "GGG"
tại "GGG" có các dòng chứa dữ liệu trùng nhau (đôi khi xen kẽ), vậy nhờ các a(c) giúp e viết code dồn dòng (không phải delete rows) khi thấy dữ liệu trùng (dữ liệu trùng thì chỉ 1 số thôi, ưu tiên số đầu tiên).
Ví dụ: như trên hình, nếu dò từ trên xuống mà thấy dữ liệu trùng ứng với cột "CCC"
thì lấy 1 số đầu tiên rồi dồn lên....
vậy kết quả là:
2014-07-07_16-12-45.jpg
Chân thành cảm ơn nhiều....!!!
 

File đính kèm

  • 2014-07-07_15-40-23.jpg
    2014-07-07_15-40-23.jpg
    93.3 KB · Đọc: 8
  • don dong.rar
    don dong.rar
    21.5 KB · Đọc: 22
Chào các a(c) trong GPE, e có dữ liệu như sau:

chú thích: cột C có tên "CCC", cột G có tên "GGG"
tại "GGG" có các dòng chứa dữ liệu trùng nhau (đôi khi xen kẽ), vậy nhờ các a(c) giúp e viết code dồn dòng (không phải delete rows) khi thấy dữ liệu trùng (dữ liệu trùng thì chỉ 1 số thôi, ưu tiên số đầu tiên).
Ví dụ: như trên hình, nếu dò từ trên xuống mà thấy dữ liệu trùng ứng với cột "CCC"
thì lấy 1 số đầu tiên rồi dồn lên....
vậy kết quả là:

Chân thành cảm ơn nhiều....!!!

Theo như hình mô tả thì là XÓA DÒNG rồi còn gì? Tức em nào trùng nhau chỉ lấy 1
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Ý này đúng với ý e,
.....................................................................................................................

nhưng ý này là ClearContents (xóa rồi dồn lên) <> delete rows
Bạn giải thích xem ClearContents (xóa rồi dồn lên) <> delete rows nó khác nhau như về cái gì? Khác nhau như thế nào? Tôi thì lại thấy tác dụng của nó như nhau?
 
Upvote 0
Bạn giải thích xem ClearContents (xóa rồi dồn lên) <> delete rows nó khác nhau như về cái gì? Khác nhau như thế nào? Tôi thì lại thấy tác dụng của nó như nhau?
Thật ra, vì bên cạnh các cột đó còn 1 ít ghi chú (còn 1 số bảng dữ liệu) nên e không muốn xóa hàng vì sẽ mất đi dữ liệu ghi chú bên cạnh vì thế :
ClearContents (xóa rồi dồn lên) <> delete rows nó
 
Upvote 0
To thầy ndu:
Em spam chút: Cái này dùng Dic được thầy nhỉ?
 
Upvote 0
Thật ra, vì bên cạnh các cột đó còn 1 ít ghi chú (còn 1 số bảng dữ liệu) nên e không muốn xóa hàng vì sẽ mất đi dữ liệu ghi chú bên cạnh vì thế :

Vậy có nghĩa là xóa theo kiểu Shift cells up (không xóa dòng)... và sau khi xóa xong nó sẽ không khớp với các cột bên cạnh nữa, ví dụ:
- Dữ liệu của bạn đang có 20 dòng
- Bạn phát hiện có 3 cell trùng tại cột C và quyết định xóa nó theo kiểu Shift cells up
- Vậy thì hiện tai cột C sẽ còn có 17 dòng trong khi các cột cạnh bên vẫn là 20 dòng
Bạn nghĩa sao?
 
Upvote 0
vì để đơn giản nên e chỉ đưa dữ liệu cần thiết lên thôi, giờ e đưa file gốc lên:
2014-07-07_20-37-06.jpg
và đây là kết quả của nó, vì nhiều số quá nếu lọc chắc e lọc tới sáng, nên e chỉ đưa chú thích dòng cần xóa ở bên cạnh:
2014-07-07_20-38-04.jpg
mong đc phản hồi,...e xin cảm ơn...
 

File đính kèm

Upvote 0
Nếu dữ liệu như vậy thì bạn chỉ cần dùng advanced filter: không có điều kiện lọc, filter the list in place, unique record only.
 
Upvote 0
vì để đơn giản nên e chỉ đưa dữ liệu cần thiết lên thôi, giờ e đưa file gốc lên:
View attachment 124964
và đây là kết quả của nó, vì nhiều số quá nếu lọc chắc e lọc tới sáng, nên e chỉ đưa chú thích dòng cần xóa ở bên cạnh:
mong đc phản hồi,...e xin cảm ơn...
bạn xem file................
 

File đính kèm

Upvote 0
vì để đơn giản nên e chỉ đưa dữ liệu cần thiết lên thôi, giờ e đưa file gốc lên:
View attachment 124964
và đây là kết quả của nó, vì nhiều số quá nếu lọc chắc e lọc tới sáng, nên e chỉ đưa chú thích dòng cần xóa ở bên cạnh:
View attachment 124965
mong đc phản hồi,...e xin cảm ơn...
***Viết vui thôi chứ đọc tới đọc lui để bài của bạn thấy kỳ kỳ. Nếu đúng là chỉ dồn có mấy cột thì code bên dưới không ổn
Nếu bạn xài Office 2007 trở về sau thì thử code này
PHP:
Sub XoaDongTrung()
[A5:H10000].RemoveDuplicates 7, 1
End Sub
Nếu là Office 2003 thì thử code này.
PHP:
Sub Xoa()
Dim nguon(), i, j, k
nguon = Range([A6], [H65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(nguon)
      If Not .exists(nguon(i, 7)) Then
         k = k + 1
         .Add nguon(i, 7), ""
         For j = 1 To 8
            nguon(k, j) = nguon(i, j)
         Next
      End If
   Next
End With
[A6:H10000].ClearContents
[A6].Resize(k, 8) = nguon
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
To nad582:
Bạn đã test chưa? Kết quả thế nào? Sao chưa thấy hồi âm???
 
Upvote 0
To nad582:
Bạn đã test chưa? Kết quả thế nào? Sao chưa thấy hồi âm???
e vừa test xong thì thấy thế này; kết quả của anh và kết quả của anh
[URL="http://www.giaiphapexcel.com/forum/member.php?134916-quanghai1969" đã viết:
là giống nhau, nhưng sao cột C trong đó các dữ liệu có một số bị đỗi vị trí, và các cột khác không dồn lên chung,
2014-07-08_16-17-21.jpg
và đây là kết quả của e sau khi (xóa dữ liệu ở cột G) dồn dòng lên:
2014-07-08_16-10-23.jpg
mong a kiem tra lại giúp e, mong hồi âm...
 

File đính kèm

Upvote 0
e vừa test xong thì thấy thế này; kết quả của anh và kết quả của anh là giống nhau, nhưng sao cột C trong đó các dữ liệu có một số bị đỗi vị trí, và các cột khác không dồn lên chung,

và đây là kết quả của e sau khi (xóa dữ liệu ở cột G) dồn dòng lên:

mong a kiem tra lại giúp e, mong hồi âm...
Tôi nhớ không nhầm bạn bảo chỉ xóa những dữ liệu trùng tại cột đó, vì các cột bên cạnh vẫn có dữ liệu bạn không muốn xóa chúng còn gì? Sao giờ lại bảo dồn chúng nên? Nếu bạn nói sớm là xóa cả dữ liệu của các cột bên cạnh thì quá đơn giản rồi!
 
Upvote 0
Thật ra, vì bên cạnh các cột đó còn 1 ít ghi chú (còn 1 số bảng dữ liệu) nên e không muốn xóa hàng vì sẽ mất đi dữ liệu ghi chú bên cạnh vì thế :
Đây là nguyên văn của bạn. Thêm vào đó trong file bạn gửi lên lại có 1 số cột bị ẩn nên tôi nghĩ dữ liệu của cột này không được xóa. Tóm lại không hiểu ý tác giả.
 
Upvote 0
Đây là nguyên văn của bạn. Thêm vào đó trong file bạn gửi lên lại có 1 số cột bị ẩn nên tôi nghĩ dữ liệu của cột này không được xóa. Tóm lại không hiểu ý tác giả.
những cột bị ẩn ko cần thiết cho việc xóa nên e ẩn nó đi, nhưng khi xóa dòng thì mấy dòng cột ẩn đó cũng xóa đi, còn (1 số bảng dữ liệu) là nằm bên vùng từ cột J về sau.
giờ e mô tả cụ thể lại:
bảng dữ liệu của e:
2014-07-08_16-54-15.jpg

vùng màu đỏ là thực hiện, vùng màu xanh là cố định
chọn vùng A6:H65000, tại cột G dò từ trên xuống dưới (G6:G65000) ứng với cột C, số liệu nào trùng nhau thì xóa dòng đó (nhưng vẫn giữ nguyên dữ liệu vùng màu xanh).....kết quả thì ở bài #14...
mong hồi âm của a...
 
Upvote 0
những cột bị ẩn ko cần thiết cho việc xóa nên e ẩn nó đi, nhưng khi xóa dòng thì mấy dòng cột ẩn đó cũng xóa đi, còn (1 số bảng dữ liệu) là nằm bên vùng từ cột J về sau.
giờ e mô tả cụ thể lại:
bảng dữ liệu của e:
View attachment 125016

vùng màu đỏ là thực hiện, vùng màu xanh là cố định
chọn vùng A6:H65000, tại cột G dò từ trên xuống dưới (G6:G65000) ứng với cột C, số liệu nào trùng nhau thì xóa dòng đó (nhưng vẫn giữ nguyên dữ liệu vùng màu xanh).....kết quả thì ở bài #14...
mong hồi âm của a...
Đấy bạn cứ trình bày như vậy có phải dễ hiểu không.
 
Upvote 0
những cột bị ẩn ko cần thiết cho việc xóa nên e ẩn nó đi, nhưng khi xóa dòng thì mấy dòng cột ẩn đó cũng xóa đi, còn (1 số bảng dữ liệu) là nằm bên vùng từ cột J về sau.
giờ e mô tả cụ thể lại:
bảng dữ liệu của e:


vùng màu đỏ là thực hiện, vùng màu xanh là cố định
chọn vùng A6:H65000, tại cột G dò từ trên xuống dưới (G6:G65000) ứng với cột C, số liệu nào trùng nhau thì xóa dòng đó (nhưng vẫn giữ nguyên dữ liệu vùng màu xanh).....kết quả thì ở bài #14...
mong hồi âm của a...
Test và hồi âm lại ngay cho tôi!
 

File đính kèm

Upvote 0
e vừa test xong thì thấy thế này; kết quả của anh và kết quả của anh là giống nhau, nhưng sao cột C trong đó các dữ liệu có một số bị đỗi vị trí, và các cột khác không dồn lên chung,
View attachment 125012
và đây là kết quả của e sau khi (xóa dữ liệu ở cột G) dồn dòng lên:
View attachment 125013
mong a kiem tra lại giúp e, mong hồi âm...

Code này là đúng theo cái công thức của bạn đây nhưng với công thức đó thì không phải là xoá trùng nhá
Vì nếu dữ liệu trùng nằm ở những dòng khác nhau thì công thức đó là trật lất
Nếu công thức đó mà đúng thì dùng Dictionary để code cho bài này là đi toi.
PHP:
Sub Xoa()
Dim nguon(), i, j, k
nguon = Range([A6], [H65536].End(3)).Value
For i = 2 To UBound(nguon)
   If nguon(i, 7) <> nguon(i - 1, 7) Then
      k = k + 1
      For j = 1 To 8
         nguon(k, j) = nguon(i, j)
      Next
   End If
Next
[A6:H10000].ClearContents
[A6].Resize(k, 8) = nguon
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Test và hồi âm lại ngay cho tôi!
Chào a, e kiểm tra rồi,...từ dòng 29 trở lên thì ok, nhưng các dòng phía dưới thì bị thiếu dữ liệu (chỗ cột "Spam". ví dụ như kết quả của anh: cột B tên CSA2, CSA3, CSA4, CSA5 thiếu Spam 5 và Spam 7)
2014-07-08_18-29-20.jpg
...e có so sánh trong file đính kèm,...nhờ anh chỉnh sửa lại giúp e...cảm ơn...
 

File đính kèm

Upvote 0
Chào a, e kiểm tra rồi,...từ dòng 29 trở lên thì ok, nhưng các dòng phía dưới thì bị thiếu dữ liệu (chỗ cột "Spam". ví dụ như kết quả của anh: cột B tên CSA2, CSA3, CSA4, CSA5 thiếu Spam 5 và Spam 7)
View attachment 125021
...e có so sánh trong file đính kèm,...nhờ anh chỉnh sửa lại giúp e...cảm ơn...
Tôi hỏi thêm bạn 1 chút. Ví dụ trong cột G với 1 giá trị nào đó xuất hiện 4 lần trong côt. Trong đó có 2 thằng ở cạnh nhau còn 2 thằng kia ở cạnh nhau nhưng ko ở cạnh 2 thằng này. Hỏi phải xóa đi mấy thằng và giữ lại mấy thằng???
 
Upvote 0
Chào a, e kiểm tra rồi,...từ dòng 29 trở lên thì ok, nhưng các dòng phía dưới thì bị thiếu dữ liệu (chỗ cột "Spam". ví dụ như kết quả của anh: cột B tên CSA2, CSA3, CSA4, CSA5 thiếu Spam 5 và Spam 7) View attachment 125021 ...e có so sánh trong file đính kèm,...nhờ anh chỉnh sửa lại giúp e...cảm ơn...

Code bài 22 của mình cũng trật lất, thiếu mất 1 dòng.

Code này đúng với dữ liệu kết quả của bạn nè

PHP:
Sub Xoa()
Dim nguon(), i, j, k
nguon = Range([A6], [H65536].End(3)).Value
k = 1
For i = 2 To UBound(nguon)
   If nguon(i, 7) <> nguon(i - 1, 7) Then
      k = k + 1
      For j = 1 To 8
         nguon(k, j) = nguon(i, j)
      Next
   End If
Next
[A6:H10000].ClearContents
[A6].Resize(k, 8) = nguon
End Sub
 
Upvote 0
Code này là đúng theo cái công thức của bạn đây nhưng với công thức đó thì không phải là xoá trùng nhá
Vì nếu dữ liệu trùng nằm ở những dòng khác nhau thì công thức đó là trật lất
Nếu công thức đó mà đúng thì dùng Dictionary để code cho bài này là đi toi.
PHP:
Sub Xoa()
Dim nguon(), i, j, k
nguon = Range([A6], [H65536].End(3)).Value
For i = 2 To UBound(nguon)
   If nguon(i, 7) <> nguon(i - 1, 7) Then
      k = k + 1
      For j = 1 To 8
         nguon(k, j) = nguon(i, j)
      Next
   End If
Next
[A6:H10000].ClearContents
[A6].Resize(k, 8) = nguon
End Sub
bài của anh quanghai1969 thì ok nhưng có 1 dòng đầu bi thiếu
2014-07-08_19-37-23.jpg
a điều chỉnh lại giúp e...chân thành cảm ơn
 

File đính kèm

Upvote 0
Tôi hỏi thêm bạn 1 chút. Ví dụ trong cột G với 1 giá trị nào đó xuất hiện 4 lần trong côt.
1 giá trị trong cột G xuất hiện nhiều lần hay 4 lần trong cột thì cũng phụ thuộc vào cột C,
Trong đó có 2 thằng ở cạnh nhau còn 2 thằng kia ở cạnh nhau nhưng ko ở cạnh 2 thằng này. Hỏi phải xóa đi mấy thằng và giữ lại mấy thằng???
nhưng vì e đã filter nó rồi nên các giá trị giống nhau của nó sẽ ở gần nhau và khi xóa chỉ giữ lại giá trị đầu là ưu tiên còn các giá trị phía dưới thì xóa đi...
 
Upvote 0
1 giá trị trong cột G xuất hiện nhiều lần hay 4 lần trong cột thì cũng phụ thuộc vào cột C,

nhưng vì e đã filter nó rồi nên các giá trị giống nhau của nó sẽ ở gần nhau và khi xóa chỉ giữ lại giá trị đầu là ưu tiên còn các giá trị phía dưới thì xóa đi...
Với phát biểu này thì mình dám chắc kết quả vẫn không đúng, vì nếu đã Sort thì dữ liệu đúng chỉ có 1 nữa của bảng kết quả. Bạn thử dùng hàm Countif để kiểm tra đi thì sẽ biết

*********

Đọc mấy lần thì hiểu thêm chút
Bạn xài code này thì sẽ không cần Filter hay Sort gì cả, cứ bấm nút thì ra kết quả
PHP:
Sub Xoa()
Dim nguon(), i, j, k, dk, kq(1 To 65536, 1 To 8)
nguon = Range([A6], [H65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(nguon)
      dk = nguon(i, 2) & nguon(i, 3) & nguon(i, 4) & nguon(i, 7)
      If Not .exists(dk) Then
         k = k + 1
         .Add dk, ""
         For j = 1 To 8
            kq(k, j) = nguon(i, j)
         Next
      End If
   Next
End With
[A6:H10000].ClearContents
[A6].Resize(k, 8) = kq
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
1 giá trị trong cột G xuất hiện nhiều lần hay 4 lần trong cột thì cũng phụ thuộc vào cột C,

nhưng vì e đã filter nó rồi nên các giá trị giống nhau của nó sẽ ở gần nhau và khi xóa chỉ giữ lại giá trị đầu là ưu tiên còn các giá trị phía dưới thì xóa đi...
Nếu vậy thì code của tôi là chính xác rồi. Nó lọc các giá trị trùng và chỉ giữ lại 1. Vì kết quả mong muốn mà bạn gửi cũng chưa chính xác nên khi đối chiếu sẽ thấy lệch nhau thôi.
 
Upvote 0
Nếu vậy thì code của tôi là chính xác rồi. Nó lọc các giá trị trùng và chỉ giữ lại 1. Vì kết quả mong muốn mà bạn gửi cũng chưa chính xác.
Không phải đâu, tại tác giả mô tả sai đó, thật ra dữ liệu được xác định là trùng hay không còn liên quan đến cột B, C, D và G. Tất cả các cột giống nhau mới gọi là trùng. Ẹc

.. Chờ ý kiến của chủ topic thôi
 
Upvote 0
Không phải đâu, tại tác giả mô tả sai đó, thật ra dữ liệu được xác định là trùng hay không còn liên quan đến cột B, C, D và G. Tất cả các cột giống nhau mới gọi là trùng. Ẹc

.. Chờ ý kiến của chủ topic thôi
Thật sự với kiểu mô tả của tác giả thế này thì chỉ có tự đoán ý và làm thôi. Tốt hơn hết nên đưa file giả lập nên chỉ khoảng 20 dòng thôi, mô tả thật rõ, nhập kết quả mong muốn bằng tay vào file luôn sẽ dễ hình dung và kiểm tra kết quả hơn.
 
Upvote 0
Rất vui khi làm thành viên trong GPE, về sự nhiệt tình của các anh sẽ làm diễn đàn ngày càng phát triển. thật ra kết quả như thế thì rất tốt cho e rồi....vài sự góp ý về vấn đề đặt câu hỏi làm sao diễn đặt ngắn gọn, rõ ràng, dễ hiểu thì e sẽ cố gắng để ý hơn....xin cảm ơn
 
Upvote 0

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

Back
Top Bottom