Các câu hỏi về lọc ra danh sách duy nhất (loại bỏ dữ liệu trùng) (2 người xem)

Liên hệ QC

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

DVC's student

Thành viên mới
Tham gia
19/11/06
Bài viết
19
Được thích
11
Nghề nghiệp
sắp thất nghiệp!
Các bác ơi giúp em với, -\\/.
E có một danh sách nhiều dòng có thể khác, có thể giống nhau, muốn lọc đối với những dòng trùng chỉ lấy 1 dòng thì phải làm sao ạ?

Vd dữ liệu ban đầu gồm các dòng:
ngu
ngon
akya
oi
ngu
ngon


Lọc thế nào để được được:
ngu
ngon
akya
oi

Những từ trùng: "ngu", "ngon" chỉ xuất hiện một lần trên dữ liệu đã lọc.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cái này dùng Advance Filter nhớ chọn Unique Record Only hay là dùng Pivot, còn VBA thì kiểm tra trên 4R, đã bàn rất nhiều.
 
Ví dụ cột chứa dữ liệu của bạn là cột A.
Cột cần lọc ra danh sách xuất hiện duy nhất là cột B
Ở ô B1 bạn gõ công thức: =if(countif($A$1:A1;A1)>1;"";A1)
Sau đó kéo fill down đến hết dòng cuối cùng.
Ở cột B bạn chọn lọc non blank là ra danh sách giá trị duy nhất của cột A như bạn muốn
 
Neu ban ko xai advanced filter thi co the dung VBA macro nhu sau:

-------------------------
Sub GiatriDuyNhat()

Dim i As Long
Dim HangCuoi As Long

HangCuoi = Range("A65536").End(xlUp).Row
For i = 1 To HangCuoi
If Application.WorksheetFunction.CountIf(Range("A1:A" & HangCuoi), Range("A" & i).Text) = 1 Then Range("B65536").End(xlUp)(2, 1).Value = Range("A" & i).Text
Next i

End Sub
------------------------

Can luu y: du lieu can loc o cot A va khi khoi dong macro ke qua se duoc liet ke qua cot B.
 
Ké chút nha, Digita!

ktphong đã viết:
Nếu tôi muốn data ở 1 sheet khác (sheet 2) và kết quả ở sheet 1 thì sao?
Thì sửa câu lệnh này:
Mã:
If Application.WorksheetFunction.CountIf(Range("A1:A" & HangCuoi), Range("A" & i).Text) = 1 _
       Then Range("B65536").End(xlUp)(2, 1).Value = Range("A" & i).Text
thành:
PHP:
   If Application.WorksheetFunction.CountIf(Range("A1:A" & HangCuoi), Range("A" & i).Text) = 1 Then  _
    Sheets("Sheet1").Range("A" & Sheets("Sheet1").Range("AB65536").End(xlUp).Row +1) = Range("A" & i).Text
 
Mình có 2 sheet có cấu trúc như nhau. Trong sheet có cột tên hàng và cột đơn vị cung cấp. Mình muốn nhờ các bạn hướng dẫn cách làm để tạo một ra một sheet trung gian chứa các dữ liệu trùng lặp hoặc không trùng lặp trong 2 sheet gốc

Mình cũng đang học về Pivot Table. Bác nào có tài liệu (càng kỹ càng hay) thì cho mình với
 
Chỉnh sửa lần cuối bởi điều hành viên:
zinzin đã viết:
Mình có 2 sheet có cấu trúc như nhau. Trong sheet có cột tên hàng và cột đơn vị cung cấp. Mình muốn nhờ các bạn hướng dẫn cách làm để tạo một ra một sheet trung gian chứa các dữ liệu trùng lặp hoặc không trùng lặp trong 2 sheet gốc
bạn xem file này nha.
 

File đính kèm

To digi ta. Tôi thử code của bạn thì kết quả nó không xuất hiện những tên trùng nhau. Đề bài là những tên trùng cũng phải xuất hiện ở kết quả.
Và cho tôi hỏi thêm nếu tiếp tục phải sort chuỗi kết quả đó thì code kéo dài sẽ như thế nào? Xin cám ơn
 
Nếu mình muốn lấy tất cả dữ liệu cho vào 1 combo, nhưng với điều kiện những cái nào trùng thì chỉ lấy 1 mà thôi thì code ntn?
 
Em cũng có nhu cầu lọc dữ liệu tương tự.
Em có một danh sách trong đó các mặt hàng chia theo mã số, tên hàng, giờ và mã kho.
Em muốn từ danh sách tổng tách các mặt hàng chia theo mã kho ( theo từng sheet ), theo mã hàng và tính tổng theo ngày.
Híc, cụ thể các anh chị xem giúp em trong file đính kèm.
Sheet1 là dữ liệu tổng, A00, A01, A02 là dữ liệu lọc.
Em cảm ơn nhiều.
 

File đính kèm

Tunguyen đã viết:
Em cũng có nhu cầu lọc dữ liệu tương tự.
Em có một danh sách trong đó các mặt hàng chia theo mã số, tên hàng, giờ và mã kho.
Em muốn từ danh sách tổng tách các mặt hàng chia theo mã kho ( theo từng sheet ), theo mã hàng và tính tổng theo ngày.
Híc, cụ thể các anh chị xem giúp em trong file đính kèm.
Sheet1 là dữ liệu tổng, A00, A01, A02 là dữ liệu lọc.
Em cảm ơn nhiều.
Bạn đâu cần chia ra thành 3 sheet chứ... muốn lọc Mã kho nào thì cứ chọn vào Drop down list tại cell B2 ấy... nó sẽ trích danh sách cho bạn... Đàng nào trong cùng 1 thời điểm bạn cũng chỉ nhìn hoặc in có 1 list nên đâu cần làm 3 list 1 lúc, đúng ko?
Xem file, tôi dùng Advanced Filter
ANH TUẤN
 

File đính kèm

Em cần chia làm 3 sheet vì :
Số lượng kho có thể tăng thêm.
Dữ liệu sau khi trích có thể dùng để làm database cho các tác vụ khác.
Vì vậy em nghĩ dùng VBA là tốt nhất, trước hết lọc để ra số lượng và mã kho, sau đó Advance Filter để ra mã hàng, sau đó dùng sumproduct để tính tổng.
Thuật toán là thế nhưng do em không biết VBA nên không làm được, dùng công thức thì không linh hoạt khi số lượng kho và số lượng hàng biến động nhiều.
 
Nếu số lượng kho tăng lên 100 chẳng lẽ bạn muốn chia thành 100 sheet sao? Tăng thêm bao nhiêu, khi muốn trích kho nào thì cứ chọn vào Validation thì code tự trích cho bạn thôi
ANH TUẤN
 
Vâng, nếu kho tăng đến như thế cũng vẫn phải tách mà. Dùng validation như của anh cũng hay, nhưng mà sao khi em copy dữ liệu mới vào sheet1 thì khi lọc nó chỉ ra phần Extract thôi anh.
Hì, em đã tìm ra lỗi.
Em đang xài tạm file của anh trong lúc nghiên cứu VBA. Công nhận anh Tuấn rất giỏi về công thức.

Híc, em lại phải sửa bài lần nữa, file locdulieu của anh mới là chỉ lọc theo mã kho, chưa lọc theo mã hàng và tính tổng được.
 
Lần chỉnh sửa cuối:
Tunguyen đã viết:
Dữ liệu sau khi trích có thể dùng để làm database cho các tác vụ khác. Vậy dùng VBA là tốt nhất, trước hết lọc để ra số lượng và mã kho, sau đó Advance Filter để ra mã hàng, sau đó dùng . . . Thuật toán là thế nhưng do em không biết VBA nên không làm được,
Mình làm thử cho bạn đoạn Code để lọc theo mã kho rồi đây
PHP:
Option Explicit

Sub SapXep()
' Macro recorded 3/25/2010 by Sa_DQ in GPE.COM'
 Dim lRow As Long, dRow As Long, cRow As Long, jZ As Long
 Dim MaKho As String
 
 Application.ScreenUpdating = False
 Sheets("Sheet1").Select:            Columns("A:AO").Select
 Selection.Sort Key1:=Range("G2"), Order1:=xlAscending, Key2:=Range("C2") _
    , Order2:=xlAscending, Key3:=Range("E2"), Order3:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
    xlSortNormal
 lRow = Range("C65432").End(xlUp).Row
 
 For jZ = 2 To lRow
    With Range("G" & jZ)
        If .Value <> MaKho And MaKho = "" Then
            dRow = jZ:          MaKho = .Value
            
        ElseIf .Value <> MaKho And MaKho <> "" Then
            cRow = .Offset(-1).Row
            Sheets(MaKho).Range("A2:AP" & lRow).ClearContents
            Range("A" & dRow & ":AP" & cRow).Copy Destination:=Sheets(MaKho).Range("A2")
            dRow = jZ:          MaKho = .Value
        End If
    End With
 Next jZ
 Sheets(MaKho).Range("A2:AP" & lRow).ClearContents
 Range("A" & dRow & ":AP" & lRow).Copy Destination:=Sheets(MaKho).Range("A2")
End Sub
Có 1 số lưu í khi dùng:
1./ Dòng đầu & dòng thứ 3 không được để trống (để mácro thực thi đúng ngay từ dòng 2 có CSDL)
2./ Nếu thêm kho thì tạo thêm sheet có tên đúng với mã kho đó & dòng 1 của sheet mới này cũng cần có tiêu đề được tạo = tay của bạn (Sau này, 1 khi hoàn tất chương trình, sẽ tự động hóa khâu này)
3./ Sheet1 đã bị macro sắp xếp theo mã kho. . . Vì CSDL của bạn nhiều cột quá nên ngại, không dám Adv Filter luôn. Nếu có gì phiền thì 'Kêu' nha!

Tất nhiên chúng ta sẽ tiếp, nếu bạn muốn theo hướng này!
 

File đính kèm

Em đã thử rồi, kết quả là được.
Tuy nhiên dữ liệu của Sheet1 bị sắp xếp lại thì không ổn lắm, em cần giữ nguyên để còn so sánh. Thực ra dữ liệu đang được sắp xếp theo mã hàng, nếu như sắp xếp theo mã kho để lọc sau đó thêm lệnh sort lại theo mã hàng là được.
Anh dậy em cách tạo sheet theo mã kho với.
 
Dễ mà, thích thì chìu!

1. Kết quả là được. Tuy nhiên dữ liệu đang được sắp xếp theo mã hàng, nếu như sắp xếp theo mã kho để lọc. Sau đó thêm lệnh sort lại theo mã hàng là được.
Chú í: Phải chép cả 2 macro này thay cho cái cũ, nha.

PHP:
Option Explicit

Sub SapXep()
' Macro by Sa_DQ in GPE.COM '
 Dim lRow As Long, dRow As Long, cRow As Long, jZ As Long
 Dim MaKho As String
 
 Application.ScreenUpdating = False
 Sheets("Sheet1").Select:            Columns("A:AO").Select
 SXep Range("G2"), Range("C2")
 
 lRow = Range("C65432").End(xlUp).Row       '<<=='
 
 For jZ = 2 To lRow
    With Range("G" & jZ)
        If .Value <> MaKho And MaKho = "" Then
            dRow = jZ:          MaKho = .Value
            
        ElseIf .Value <> MaKho And MaKho <> "" Then
            cRow = .Offset(-1).Row
            Sheets(MaKho).Range("A2:AP" & lRow).ClearContents
            Range("A" & dRow & ":AP" & cRow).Copy _
                Destination:=Sheets(MaKho).Range("A2")
            dRow = jZ:          MaKho = .Value
        End If
    End With
 Next jZ
 Sheets(MaKho).Range("A2:AP" & lRow).ClearContents
 Range("A" & dRow & ":AP" & lRow).Copy Destination:=Sheets(MaKho).Range("A2")
 Sheets("Sheet1").Select:            Columns("A:AO").Select         '<<=='
 SXep Range("C2"), Range("G2")      '<<=='
End Sub
PHP:
Sub SXep(RngT As Range, RngS As Range)
 Selection.Sort Key1:=RngT, Order1:=xlAscending, Key2:=RngS _
    , Order2:=xlAscending, Key3:=Range("E2"), Order3:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
    xlSortNormal
End Sub
2. Anh dậy em cách tạo sheet theo mã kho với.

PHP:
Sub AddSheets()
 'By Voda in GPE.COM '
 Static i As Integer
 On Error Resumer Next
  i = i + 1:          Worksheets.Add

 ActiveSheet.Name = "GPE" & Right("0" & i, 2)
End Sub
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Bạn đâu cần chia ra thành 3 sheet chứ... muốn lọc Mã kho nào thì cứ chọn vào Drop down list tại cell B2 ấy... nó sẽ trích danh sách cho bạn... Đàng nào trong cùng 1 thời điểm bạn cũng chỉ nhìn hoặc in có 1 list nên đâu cần làm 3 list 1 lúc, đúng ko?
Xem file, tôi dùng Advanced Filter
ANH TUẤN

Phương pháp trích lọc dữ liệu của bác Anhtuan1066, ngắn gọn mà cũng rất hay, tuy nhiên nếu được bác phát triển thêm code để có thể thực hiện thêm được một số chức năng theo yêu cầu người dùng trong các trường hợp sau:
(Em mô tả dựa trên file Locdulieu mà bác đã post ở bài trên)

1/- Nếu ta chỉ cần trích xuất một số cột bên sheet dữ liệu gốc (sheet1) (có thể là những cột không liền kề nhau, ví dụ ta chỉ cần trích cột số 1,2,3,5,7,8,10,... sang bên sheet trich (tạm gọi là báo cáo)?

3/- Sau khi đã lọc dữ liệu từ sheet dữ liệu gốc (sheet1) sang bên sheet trich (sheet báo cáo), yêu cầu: đánh số thứ tự liên tục từ dòng dữ liệu đầu tiên đến dòng cuối của báo cáo. Cuối báo cáo phải có dòng Tổng cộng & In đậm?. Cuối báo cáo phải có mục đọc số tổng cộng cuối báo cáo thành chữ? đồng thời bên dưới dòng tổng cộng của báo cáo phải có các thành phần của 1 báo cáo như: Ngày .... tháng .... năm ....... hiện hành thực hiện báo cáo cùng với các dòng Người lập biểu, Người xem xét, Người duyệt, ...

Những trường hợp mà em nêu trên đây rất thường gặp (và hầu như là phải có) gắn liền với việc trích lọc dữ liệu thành báo cáo.

Mong các bác tham gia để hoàn thiện các vấn đề nêu trên.

Thân ái!
 
vungoc đã viết:
Phương pháp trích lọc dữ liệu của bác Anhtuan1066, ngắn gọn mà cũng rất hay, tuy nhiên nếu được bác phát triển thêm code để có thể thực hiện thêm được một số chức năng theo yêu cầu người dùng trong các trường hợp sau:
(Em mô tả dựa trên file Locdulieu mà bác đã post ở bài trên)
1/- Nếu ta chỉ cần trích xuất một số cột bên sheet dữ liệu gốc (sheet1) (có thể là những cột không liền kề nhau, ví dụ ta chỉ cần trích cột số 1,2,3,5,7,8,10,... sang bên sheet trich (tạm gọi là báo cáo)?

3/- Sau khi đã lọc dữ liệu từ sheet dữ liệu gốc (sheet1) sang bên sheet trich (sheet báo cáo), yêu cầu: đánh số thứ tự liên tục từ dòng dữ liệu đầu tiên đến dòng cuối của báo cáo. Cuối báo cáo phải có dòng Tổng cộng & In đậm?. Cuối báo cáo phải có mục đọc số tổng cộng cuối báo cáo thành chữ? đồng thời bên dưới dòng tổng cộng của báo cáo phải có các thành phần của 1 báo cáo như: Ngày .... tháng .... năm ....... hiện hành thực hiện báo cáo cùng với các dòng Người lập biểu, Người xem xét, Người duyệt, ...
Những trường hợp mà em nêu trên đây rất thường gặp (và hầu như là phải có) gắn liền với việc trích lọc dữ liệu thành báo cáo.

Mong các bác tham gia để hoàn thiện các vấn đề nêu trên.

Thân ái!

Chào bác, mới thay Avata hoành tráng quá!!

Thật ra vấn đề này đã có rất nhiều trên GPE rồi, em xin tóm lược lại :

  • Dùng công thức : Dùng cột phụ hoặc name để định ra các dòng thỏa mãn, sau đó dùng các hàm như Index, match . . . để "lọc" sang
  • Dùng Advanced Filter : Lọc số liệu ra 1 sheet tạm, sau đó lọc ại một lần nữa những cột mà ta cần, sau đó copy ngược trở lại báo cáo
  • Dùng vòng lặp trong VBA : Sẽ duyệt một vòng trong toàn bộ dữ liệu, nếu thấy tại dòng nào có dữ liệu thỏa mã điều kiện thì sẽ trích lọc các cột mà ta cần qua báo cáo.
  • Dùng SQL trong Data/ Import External Data : Không phổ biến
  • Dùng Pivot Table : Không phổ biến

Mỗi một phương pháp có những ưu điểm riêng mà em đã có bài phân tích về nó (giữa Vòng lặp và AF), vì vậy tùy ý thích và trình độ của mọi người thôi.

Còn về Format, theo quan điểm của riêng em thì vẫn nên có mẫu sẵn, và ước chừng số dòng tối ta trong báo cáo (khoảng 5.000 dòng chẳng hạn), ta copy vào trong mẫu có sẵn, dòng nào thừa thì hide nó đi.

Như vậy vừa đẹp lại vừa tiện lợi.

Hoặc nếu muốn thì có thể tự format nó bằng cách record macro lại, cũng đơn giản thôi mà.

Thân!
 
To: VuNgoc,
Việc lọc dữ liệu, đây là vấn đề nhiều người đã đề cập.
Phương pháp thì có nhiều. Mỗi phương pháp có những điểm hay, dỡ khác nhau.
Nhưng vấn đề là dữ liệu của mỗi bài toán lọc là khác nhau. Chính vì vậy khó đưa ra được một bài toán tổng quát cho tất cả các trường hợp. (Tương tự như một bài toán tạo Form nhập liệu vậy)
Anh thấy A-Tools của Tuân rất hay nếu chúng ta biết áp dụng. Dự định có một buổi sinh hoạt giới thiệu về Add-In này.

Lê Văn Duyệt
 
Tôi thấy như vầy:
1> Dùng công thức: Tuy đây là nhưng công thức phổ biến, nhưng kết hợp chúng với nhau 1 cách nhuần nhuyển e rằng ko phải là dể... ngay như tôi làm hoài mà còn lộn tới lộn lui
2> Dùng VBA: có 2 cách vòng lập và AF...
Tôi xét thấy trong vụ lọc này, nếu phải chọn giữa công thức và VBA thì tôi sẽ chọn VBA (mặc dù rất khoái công thức)... Và nếu phải chọn giữa vòng lập và AF thì tôi sẽ chọn AF (vì nó dể dùng nhất)
Như bạn Vungoc có nêu vấn đề, rất có thể người ta chỉ muốn lọc và lấy 1 vài cột thôi... Vậy tôi đề xuất giãi pháp: Cứ lọc hết, muốn xài cột nào thì hiện cột ấy, những cột khác ẩn đi... như vậy công việc sẽ gọn gàng mà cách thức thao tác cũng khá dể
Các bạn nghĩ sao?
Chỉ với 2 đoạn code: 1. Advanced Filter2. Ẩn cột chúng ta có thể tự record lấy rồi chỉnh sửa đôi chút là đạt yêu cầu... Hoàn toàn nằm trong khả năng của người dùng
Mến
ANH TUẤN
 
Chào DVC's student !
y/c of bạn rất đơn giản mà, bạn chỉ cần dùng lệnh consolidate là giải quyết xog y/c of bạn rồi, chứ đâu cần dùng Autofile..,Code,.. tùm lum hết vậy. Chúc bạn thành công.
Thân chào!
 
Lọc dữ liệu không trùng nhau của 2 bảng

Xin cho hỏi? Tôi có 2 bảng dữ liệu (xin xem tập tin đính kèm). Tôi muốn lấy ra các dữ liệu không có ở cả 2 bảng. Bác nào biết xin chỉ giúp. Xin cảm ơn.
 

File đính kèm

Xin cho hỏi? Tôi có 2 bảng dữ liệu (xin xem tập tin đính kèm). Tôi muốn lấy ra các dữ liệu không có ở cả 2 bảng. Bác nào biết xin chỉ giúp. Xin cảm ơn.

Chào bạn,
làm gì có dữ liệu không có ở cả hai bảng, chỉ có dữ liệu có ở bảng 1 và không có ở bảng 2 và ngược lại thôi.

Bạn xem thử file đính kèm xem.
 

File đính kèm

File đính kèm

À, tai vì em nói không rõ ràng, xin lỗi các Bác. "Dữ liệu không có cả 2 bảng" nghĩa là không có ở bảng 1 hoặc không có ở bảng 2. Tại em nói ngắn gọn quá thành ra bị sai.

Xin cảm ơn 2 Bác

- Cách giải quyết của Bác ca_dafi đơn giản dễ hiểu.
- Cách giải quyết của Bác hoangdanh82vn thì quá pro. Dữ liệu không trùng đã được đặt riêng ra 1 bảng.

Em thì là lính mới nên em sẽ chọn cách của Bác ca_dafi.
 
CHÀO ANH hoangdanh282 vn , anh vui chi rõ cho em biết cái công thức mà anh xài không ?
sao trong công thức không thấy tên cột mà ra kết quả hay vậy? Pro thiệt !!!
 
CHÀO ANH hoangdanh282 vn , anh vui chi rõ cho em biết cái công thức mà anh xài không ?
sao trong công thức không thấy tên cột mà ra kết quả hay vậy? Pro thiệt !!!

Thì hoangdanh282vn ý ghi ở tên file là dùng NAME rùi đó: hãy vào Insert \ Name \ Define... sẽ thấy

@hoangdanh282vn: oh, sao name nhiều thế và loằng ngoằng thế - đâu phức tạp thế nhỉ, thử tối ưu lại xem sao


TUY nhiên
@quachhuydinh bạn nên dùng giải pháp VBA theo bác SA_DQ trên kia đi - vì DL của bạn trên 2000 dòng dùng công thức sẽ rất chậm,
.
 
Thì hoangdanh282vn ý ghi ở tên file là dùng NAME rùi đó: hãy vào Insert \ Name \ Define... sẽ thấy

@hoangdanh282vn: oh, sao name nhiều thế và loằng ngoằng thế - đâu phức tạp thế nhỉ, thử tối ưu lại xem sao


TUY nhiên
@quachhuydinh bạn nên dùng giải pháp VBA theo bác SA_DQ trên kia đi - vì DL của bạn trên 2000 dòng dùng công thức sẽ rất chậm,
.

Thật ra ko nhiều Name thế đâu, chỉ 3 Name thôi, vì đây là gợi ý để tham khảo nên mình chia nhỏ ra để các bạn dễ nhìn thôi.
 
Xem lại bài mình gửi mới thấy chưa thất chính xác, mình gửi lại file khác chính xác hơn và gọn hơn.
To Anh tiger :
Cách nhanh nhất có lẻ là VBA, nhưng dùng công thức bình thường cũng nhanh nếu dùng thêm cột phụ. Không phải cái gì VBA cũng tiện lợi nhất, mà chúng ta phải nên kết hợp các phương pháp lại với nhau sao cho thật đơn giản dễ hiểu và nhanh
 

File đính kèm

Tìm điểm hòa vốn!

Cách nhanh có lẻ là VBA, nhưng dùng công thức bình thường cũng nhanh nếu dùng thêm cột phụ. . . mà chúng ta phải kết hợp các phương pháp lại với nhau sao cho thật đơn giản dễ hiểu và nhanh
Mình có 1 câu hỏi đến các 'Siêu nhân Công thức' tẹo: Làm sao trong trang tính nhiêu công thức ta biết được thời lương để hoàn thành việc cập nhật?
Í mình là tìm điểm 'Huề vón' giữa giải pháp công thức & giải pháp VBA trên 1 CSDL cụ thể nào đó;
VD trong trường hợp này, nếu dùng CT mất khoảng 30'' ( 1 khi có 2.345 record), nhưng dùng VBA thì mất 33'' cùng trên số record như vậy?
 
À đây là vấn đề cũng hay nhỉ ?
1. Đối với VBA thì chúng ta đã có topic giới thiệu về PerfMon Utility
http://www.giaiphapexcel.com/forum/showthread.php?t=5146
2. Về Công thức thì làm sao nhỉ?
Thông thường có phải là khi tính các công thức, Excel sẽ bắt đầu từ Sheet1, Sheet2,...
Và khi Tính công thức tại các Sheet thì từ trái sang phải, và từ trên xuống dưới hay không?
Nếu biết được thì chúng ta có thể đưa ra giải pháp.

Lê Văn Duyệt
 
Lọc dữ liệu trong từng ô, loại bỏ trùng nhau

Kính thưa mấy anh chị, em đang cần lọc một dữ liệu dạng như sau:


Trong các ô có chưa nhiều loại cont, nếu nó là A,B,C thì mình đếm nó là 3. Và cứ như thế mình đếm xuống nhưng khi trong một ô nào đó có xuất hiện lại A hoặc B hoặc C thì mình không tính cho ô đó là 1, mà tính là 0 ( Trong hình em có minh họa). Hay đếm tổng số container lại mà laọi những cái nào trùng.
Các anh chị giúp giùm em. Thank you!
 

File đính kèm

  • Dem so container.JPG
    Dem so container.JPG
    7.5 KB · Đọc: 459
Lần chỉnh sửa cuối:
Đếm thì chắc ko có vấn đề, nhưng phải hiểu ý đồ đếm của tác giả!
Tôi đang thắc mắc tại sao A, B, C thì đếm là 3 còn A, G lại đếm là 1
Vậy cho hỏi thế nào là đếm 1, thế nào là đếm 2, còn thế nào là đếm 3?
vân vân
ANH TUẤN
 
Thưa anh!
Thế này nhé, A,B, C là 3 bởi vì dòng đầu tiên nó xuất hiện là 3 ký tự khác nhau, nên ta sẽ đếm nó là 3. Còn đi dần xuống những ô tiếp theo sau thì ta thấy A, G thì ở đây A đã lặp lại rồi. Ta chỉ ghi nhận lại giá trị G thôi, nên ta chỉ tính là 1.
Tóm lại là đềm từ trên xuống dưới, thấy ký tự trùng là bỏ qua và ký tự chưa có ở các ô phía trên tì tính là 1. Anh Tuan hieu chua ah. Giúp giùm em nhé

VD: 1. A, B, C->3 ký tự khác nhau nên ta đềm là 3
2: D, C -> 2 ký tự khác nhau đáng lẻ ghi 2 nhưng C đã có ở phía trên rồi nên ta chỉ tính là 1 thôi.
Kết quả:
1. A, B, C: Đếm là 3
2. D, C : Đếm là 1
Kết quả đếm là : 4 ký tự khác nhau

Giúp giùm em nhé: Mail của em: tiencruise@yahoo.com
 
Lần chỉnh sửa cuối:
Hiểu rôi...
Ái chà... bài toán này khó nhai à nha... chưa nghĩ ra dc cách nào dùng công thức cả... Còn VBA thì sao nhỉ?

Tôi đề nghị thế này:
Dử liệu thật của bạn như thế nào thì đưa lên luôn đi, vì đã có 1 số trường hợp khi mọi người làm xong mới phát hiện thì ra dử liệu thật ko giống với những gì mà các bạn nói ngay lúc đầu... Khi ấy lại mất công người trợ giúp làm lại mọi thứ...
Nên nhớ rằng thuật toán phải dựa vào dử liệu thực tế, dử liệu khác 1 chút cũng làm cho kết quả khác đi...
Mến
ANH TUẤN
 
Bằng VBA đây, bạn tạm xài nha!

PHP:
Option Explicit
Sub CountIf()
 Const ChuCai As String = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"
 Dim lRow As Long, jj As Long
 Dim bZ As Byte, bW As Byte, bDem As Byte, iDd As Byte
 Dim StrC As String, SDaDem As String, sChu As String
 
 lRow = Sheets("S0").[h65432].End(xlUp).Row
 For jj = 2 To lRow
    With Cells(jj, 8)
        StrC = .Value:                  iDd = Len(Trim(StrC))
        For bW = 1 To iDd
            sChu = Mid(StrC, bW, 1)
            If InStr(1, SDaDem, sChu) = 0 Then
                If InStr(1, ChuCai, sChu) > 0 Then
                    SDaDem = SDaDem & sChu
                    bDem = 1 + bDem
            End If:                     End If
        Next bW
        .Offset(, 1) = bDem:            bDem = 0
    End With
 Next jj
     
End Sub

Mã:
   So Cont       Dem
    A,B,C         3
      D           1
      F           1
     E,G          2
     A,G          0
    B,C,H         1
 
He... he... Thấy chưa! Cũng may tôi lường trước dc vụ này nên nói bạn đưa file lên... Giờ nhìn vào dử liệu thực tế thì cái Sub của anh Sa cũng die luôn!
Để xem... Bài toán này quả là "thắt cổ" đây!
 
Thử hàm này xem. Chú ý đối số rText là vùng các ô cầm đếm.

Mã:
Function DemABC(rText As Range) As Integer
Dim myCell As Range
Dim abc As String, kytu As String, chuoi As String, vt As Integer, i As Integer
For Each myCell In rText
  chuoi = myCell.Value & ","
  vt = 1
  Do
    vt = InStr(vt, chuoi, ",")
    If vt > 0 Then
      kytu = Trim(Mid(chuoi, 1, vt - 1))
      If InStr(1, abc, kytu) = 0 Then
        abc = abc & Trim(Mid(chuoi, 1, vt - 1))
        i = i + 1
      End If
      chuoi = Mid(chuoi, vt + 1)
      If chuoi = "" Then Exit Do
    Else
      vt = 1
    End If
  Loop
Next
DemABC = i
End Function
 

File đính kèm

Thêm một tham khảo, nha!

Các bác VBA hãy cùng cố lên!$@!!
PHP:
Option Explicit

Sub Dem0Trung()
 Dim lRow As Long, Jj As Long
 Dim StrC As String, sLuu As String, SChu As String
 Dim DoDai As Byte, bDauPhay As Byte, bDem As Byte
 
 lRow = Sheets("Sheet1").[j65432].End(xlUp).Row
 For Jj = 10 To lRow
    With Cells(Jj, 10)
        StrC = .Value & ",GPE.COM"
        DoDai = Len(StrC):
        Do
            bDauPhay = InStr(StrC, ",")
            If bDauPhay = 0 Then
                Exit Do
            Else
                SChu = Mid(StrC, 1, bDauPhay - 1)
                StrC = Mid(StrC, bDauPhay + 1)
                If InStr(sLuu, SChu) = 0 Then
                    sLuu = sLuu & SChu
                    bDem = bDem + 1
                End If
            End If
        Loop
        .Offset(, 1) = bDem:        bDem = 0
    End With
 Next Jj
End Sub
 
Các bác VBA đã có đáp số rùi, còn các bác công thức thì sao, hãy cùng cố lên!$@!!
Cái này ngay từ đâu tôi có nghĩ qua, nhưng e rằng ko khả thi... Vì nếu làm dc thì 1 là sẽ tốn rất nhiều cột phụ, còn 2 nếu dùng mãng thì e rằng cai mãng ấy thật.. khủng khiếp!
ANH TUẤN
 
--=0Có thể giúp mình tạo một hàm riêng cho excell được ko?
 
Mừng quá, đã lâu lắm mới có người cho ôn lại hàm mảng tự tạo

--=0Có thể giúp mình tạo một hàm riêng cho excell được ko?
Đọc kỷ hướng dẫn trước khi dùng
(Do mình hết cota đưa files lên; đang đi xin thêm, nên thuyết minh kỹ chút vậy)
1* Bạn chép nội dung hàm vô CS VBE
(Nếu bạn thả nó đúng vị trí, thì khi vô menu Insert -> Function. . .Thì trong CS Insert Function ở ngăn 'Or select a category' dòng cuối sẽ có tên hàm tự tạo này.)
2. Dữ liệu của bạn về Container đang tại vùng 'J10:J17'
Bạn tô chọn vùng 'K10:K17' hay vùng 'L10:L17'
Và vô menu Insert => Function. . . Chọn dòng hàm tự tạo DemContaner
Khi CS của excel iêu cầu bạn nhập vùng cần tính, bạn nhập (hay dùng chuột) bôi chọn vùng 'J10:J17"
3. Vì là hàm mảng, nên bạn phải kết thúc bằng tổ hợp 3 phím thân thương

PHP:
Option Explicit: Option Base 1
Dim MDL()
Function DemContainer(Rng As Range) As Variant
 Dim Clls As Range
 ReDim MDL(Rng.Rows.Count, 1)
 Dim StrC As String, SLuu As String, SNhom As String
 Dim bDPhay As Byte, bDem As Byte
 
 For Each Clls In Rng
    StrC = Clls.Value & ",GPE.COM":   bDem = bDem + 1
    Do
        bDPhay = InStr(StrC, ",")
        If bDPhay = 0 Then
            Exit Do
        Else
            SNhom = Mid(StrC, 1, bDPhay - 1)
            StrC = Mid(StrC, bDPhay + 1)
            If InStr(SLuu, SNhom) = 0 Then
                SLuu = SLuu & SNhom
                MDL(bDem, 1) = MDL(bDem, 1) + 1
            End If
        End If
    Loop
 Next Clls
 DemContainer = MDL
End Function
 
Lần chỉnh sửa cuối:
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
 

File đính kèm

To tiencruise
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
LÀ: Ctrl + Shift + Enter


To SA_DQ
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem giùm em cái.
 
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
Mình mới có thêm Cota, nhưng bạn sắp xong rồi; Chỉ dẫn thêm bạn đây:
Hàm sẽ trả về sẽ là mảng giá trị; bạn chọn 1 ô nó chỉ cho ra kết quả 1 ô;
(Chắc bạn chưa xài hàm mảng nhiều!)
Từ ô bạn đã chọn đó, (trước hết bạn bỏ nội dung hàm trong đó đi); Tiếp sau bạn chọn không là 1 ô mà nhiều ô (tương đương số ô có bên dữ liệu về Container;
Nhập hàm như bạn đã làm & kết thúc bằng các phím mà bạn mới được BoỵXin gợi í!
(Còn gang tất nữa đến thiên đàng thôi! - Thiên đàn của excel!)
 
Mình đã làm xong bài toán dùng Name nhưng hơi chuối, hy vọng được chỉ giáo thêm
 

File đính kèm

Mình đã làm xong bài toán dùng Name nhưng hơi chuối, hy vọng được chỉ giáo thêm
Chuối thì không chuối vì đây là thành quả của một nỗ lực lớn ! Nhưng mà vẫn chưa đếm đúng , bạn thử chèn thêm đến mã thứ tư trong một ô thì ngừng đếm !
 
Chuối thì không chuối vì đây là thành quả của một nỗ lực lớn ! Nhưng mà vẫn chưa đếm đúng , bạn thử chèn thêm đến mã thứ tư trong một ô thì ngừng đếm !

Đúng vậy, vùng dữ liệu thì sửa lại dễ dàng, còn số lượng contener trong 1 iterm thì phải sửa lại công thức, khi đó muốn 4,5 hay 6... cũng được tuốt, Nếu tác giả cần bao nhiêu thì mình sửa lại bấy nhiêu chứ làm dư sợ bị hói đầu mất--=0
 
Mình góp thêm một chút cho vui.
Hàm đếm số trong từng ô:
Mã:
Option Explicit
Function Dem(vung As Range, dong As Range) As Integer
Dim cot As Integer, j As Integer, dongtren As Integer, tong As Integer
Dim StrC As Variant
Dim rngFind
cot = vung.Column
dongtren = vung.Row - 1
If InStr(dong.Value, ",") > 0 Then
    StrC = Split(dong.Value, ",")
    For j = 0 To UBound(StrC)
       Set rngFind = Range(Cells(dong.Row - 1, cot), Cells(dongtren, cot)).Find(StrC(j))
       If rngFind Is Nothing Then tong = tong + 1
    Next
           Dem = tong
Else
   Set rngFind = Range(Cells(dong.Row - 1, cot), Cells(dongtren, cot)).Find(dong)
   If rngFind Is Nothing Then tong = tong + 1
           Dem = tong
   End If
End Function
Hàm đếm tổng:
Mã:
Option Explicit
Function Demtong(vung As Range) As Integer
Dim cot As Integer, j As Integer, dongtren As Integer, tong As Integer, i As Integer, dong As Integer
Dim StrC As Variant
Dim rngFind
cot = vung.Column
dongtren = vung.Row - 1
dong = vung.Rows.Count + dongtren
For i = dong To dongtren Step -1
   If InStr(Cells(i, cot), ",") > 0 Then
        StrC = Split(Cells(i, cot), ",")
        For j = 0 To UBound(StrC)
          Set rngFind = Range(Cells(dongtren, cot), Cells(i - 1, cot)).Find(StrC(j))
          If rngFind Is Nothing Then tong = tong + 1
        Next
   Else
      Set rngFind = Range(Cells(dongtren, cot), Cells(i - 1, cot)).Find(Cells(i, cot))
      If rngFind Is Nothing Then tong = tong + 1
   End If
Next
Demtong = tong
End Function
 

File đính kèm

Mình xin gửi file mới được tối ưu hơn, tối đa 5 cont, các Name được tách riêng và sắp xếp theo một logic để dễ kiểm tra và thêm mới. Nếu muốn tăng số cont thì chỉ cần tăng Name theo logic là ok.
 

File đính kèm

5 cont thì còn đở... Lở mà nó có đến 20 cont thì... công thức đói luôn!
Hic...
 
Trong nổ lực 2 trong 1

Mình góp thêm một chút cho vui.
Hàm đếm số trong từng ô:
. . . .
Hàm đếm tổng:
. . . . .
Chi tiết xin xem trong file đính kèm!
PHP:
Option Explicit
Function CountContainer(Rng As Range, Hang As Byte)
 Dim lDem As Long, SoHg As Long
 Dim SoCont As Byte, bVTr As Byte, TCong As Integer
 Dim Clls As Range
 Dim StrC As String, sNhom As String, sLuu As String
 
 If Rng.Columns.Count > 1 Then
    CountContainer = "Only 1 column":           Exit Function
 Else
    SoHg = Rng.Rows.Count
    For Each Clls In Rng
        lDem = 1 + lDem:                        StrC = Clls.Value & ",GPE.COM"
        Do
            bVTr = InStr(StrC, ",")
            If bVTr = 0 Then
                Exit Do
            Else
                sNhom = Mid(StrC, 1, bVTr - 1)
                StrC = Mid(StrC, bVTr + 1)
                If InStr(sLuu, sNhom) = 0 Then
                    sLuu = sLuu & sNhom:        SoCont = 1 + SoCont
            End If:             End If
        Loop
        If Hang = lDem Then
            CountContainer = SoCont:            Exit Function
        Else
            TCong = TCong + SoCont:             SoCont = 0
        End If
    Next Clls
 End If
 CountContainer = "Tong: " & TCong
End Function
 

File đính kèm

-Cái 2 trong 1 của bác SA_DQ rất gọn và chuẩn.
-Góp ý thêm với bác là làm sao cải tiến tham số Hang để việc nhập công thức đơn giản hơn.
 
Bác SA thân!

Có cần phải phức tạp vậy không bác ? Em nghĩ là bác còn có thể đơn giản đi nhiều đấy!!

Thân!

P/S : Chém tướng không bằng khích tướng
 
Hỏi anh Hoang Danh tý!
Cái file excell "Loc va Dem moi" anh gởi sao em ko thấy code đâu hết vậy anh. Em muốn tham khảo tí nhưng chỉ thấy DEM1, DEM2,..., Trong funcion cũng ko luôn. VÂy là sao. Anh có thể chỉ giáo cho em không.
 
Lần chỉnh sửa cuối:
Hỏi anh Hoang Danh tý!
Cái file excell "Loc va Dem moi" anh gởi sao em ko thấy code đâu hết vậy anh. Em muốn tham khảo tí nhưng chỉ thấy DEM1, DEM2,..., Trong funcion cũng ko luôn. VÂy là sao. Anh có thể chỉ giáo cho em không.

File không dùng VBA, chỉ dùng công thức bình thường.DEM1,DEM2 chỉ là Name chứa đựng các công thức để cho công thức tổng được rút gọn và dễ nhìn hơn.
Bạn vào Insert\Name\Define để xem công thức chứa trong Name nha.
 
Xóa những dòng trùng nhau

Chào các anh chị,

Em có 1 file mẫu với những dòng data trùng nhau ( tô màu vàng ), em muốn xóa những dòng trùng nhau và chỉ để lại 1 dòng thì làm thế nào ?

Mong các anh chị giúp em với!

Mẫu định dạng excel em gửi theo file kèm bên dưới.
 

File đính kèm

Chào các anh chị,

Em có 1 file mẫu với những dòng data trùng nhau ( tô màu vàng ), em muốn xóa những dòng trùng nhau và chỉ để lại 1 dòng thì làm thế nào ?

Mong các anh chị giúp em với!

Mẫu định dạng excel em gửi theo file kèm bên dưới.

Cách đơn giản là dùng hàm if +countif để tìm ra dòng trùng, sau đó dùng advanfillter lọc và xóa đi.
 

File đính kèm

Cảm ơn 2 anh chị,

Nhưng ý của em là cho nó tự động xóa đó, em ko bít ji` nhiều về excel :( Vì 1 file excel trong đó có mấy chục ngàn dòng trùng nhau nên ko thể làm hết bằng tay dc :((

Anh đưa link 1 đống code em thua rùi :(

Giúp em đi
 
Cảm ơn 2 anh chị,

Nhưng ý của em là cho nó tự động xóa đó, em ko bít ji` nhiều về excel :( Vì 1 file excel trong đó có mấy chục ngàn dòng trùng nhau nên ko thể làm hết bằng tay dc :((

Anh đưa link 1 đống code em thua rùi :(

Đâu có code gì đâu bạn, công thức thôi mà. Cách của bạn hoangdanh282vn là hay nhất đấy (không xài VBA). Mấy chục ngàn dòng thì làm được mà.

1. Giả sử ô A2:A40000 có chứa dữ liệu cần tìm trùng nhau:
2. Ô B2 gõ vào:
Mã:
=If(Countif([B][COLOR="Blue"]$A$2[/COLOR][/B]:A2,A2)>1,"Trung","")

Lưu ý chỗ in đậm màu xanh, cố định ô đầu tiên

3. Copy công thức xuống tới ô B40000
4. Autofilter (Alt+D, F, F) hoặc Menu/Data/Filter/AutoFilter
5. Lọc điều kiện cột B="Trung"
6. Chiếu sáng vùng vừa lọc ra (trừ dòng đầu tiên A1:B1 ra nhé, đây là dòng tiêu đề), dùng phím tắt Ctrl+Shift+Down, Ctrl+Shift+Right
7. Ấn Ctrl+"-", chọn Entire Row.

Như vậy có nhanh không bạn, đâu cần phải đi tìm từng cái mà delete!
 
Bạn dùng chế độ AutoFilter mà xoá!
 
Dùng Advanced filter lọc ra thôi có chi đâu phải dùng công thức rồi dùng Auto filter nữa. Nhưng nhớ bấm chọn Unique records only.
 
Lọc các số liệu trùng nhau trong 1 Sheet hoặc 1 cột?

Hiện tại em có một danh sách các số liệu, trong đó có rất nhiều số trùng nhau, bây giờ em muốn lọc tất cả các số trùng nhau thì xóa đi chỉ lấy lại một số, các bác giúp em với.
mỗt cột của em khoảng 40000 số TK
thanks-0-/.
 
Lần chỉnh sửa cuối:
quan trọng là số liệu bạn bị trùng trong 1 cột hay trên 1 sheet?.
Nếu trên 1 cột thì bạn có thể làm theo 2 cách sau:
cách 1: chắc chỉ để tham khảo.
B1. bôi đen dòng tiêu đề
B2. Vào data / filter/ chọn auto filter
B3. Sau đó sẽ xuất hiện các ô mũi tên. Bạn lick chuột vào mũi tên của cột bạn cần lọc dữ liệu trùng.
B4. bạn nên chọn theo thứ tự từ trên xuống nhưng đừng chọn những mục trong ngoặc đơn () như: all, top 10, custom…
5. Sau khi lick chọn, những dữ liệu hiện ra từ 2 dòng trở lên là dữ liệu trùng. Bạn có thể xóa và giữ lại 1 dòng.
Cách này thì nó hơi dài. Nếu dữ liệu lớn khoảng 4000 như bạn làm rất mất thời gian.
Cách 2: Bạn sẽ phải làm cột phụ và rất nhanh
Ví dụ: giả sử bạn muốn lọc dữ liệu trùng trong cột C dữ liệu bạn muốn lọc trùng từ dòng số 3 (c3)
Bạn chọ 1 cột mà chưa hề có dữ liệu ( ví dụ cột F – tại vị trí F3), nhập vào đó công thức sau:
F3= if(countif($c$3:c3,c3)=1,max($c$2:c2)+1,””)
Sau đó kéo chuột xuống.
Kế đến, bạn làm tương tự cách 1 ở trên. Đến B4, bạn không chọn gì khác ngoài chọn Blanks).
Lúc này bạn tự do xóa tất cả các dữ liệu được xuất hiện mà không lo nữa.
Chúc bạn thành công
 
quan trọng là số liệu bạn bị trùng trong 1 cột hay trên 1 sheet?.
Nếu trên 1 cột thì bạn có thể làm theo 2 cách sau:
cách 1: chắc chỉ để tham khảo.
B1. bôi đen dòng tiêu đề
B2. Vào data / filter/ chọn auto filter
B3. Sau đó sẽ xuất hiện các ô mũi tên. Bạn lick chuột vào mũi tên của cột bạn cần lọc dữ liệu trùng.
B4. bạn nên chọn theo thứ tự từ trên xuống nhưng đừng chọn những mục trong ngoặc đơn () như: all, top 10, custom…
5. Sau khi lick chọn, những dữ liệu hiện ra từ 2 dòng trở lên là dữ liệu trùng. Bạn có thể xóa và giữ lại 1 dòng.
Cách này thì nó hơi dài. Nếu dữ liệu lớn khoảng 4000 như bạn làm rất mất thời gian.
Cách 2: Bạn sẽ phải làm cột phụ và rất nhanh
Ví dụ: giả sử bạn muốn lọc dữ liệu trùng trong cột C dữ liệu bạn muốn lọc trùng từ dòng số 3 (c3)
Bạn chọ 1 cột mà chưa hề có dữ liệu ( ví dụ cột F – tại vị trí F3), nhập vào đó công thức sau:
F3= if(countif($c$3:c3,c3)=1,max($c$2:c2)+1,””)
Sau đó kéo chuột xuống.
Kế đến, bạn làm tương tự cách 1 ở trên. Đến B4, bạn không chọn gì khác ngoài chọn Blanks).
Lúc này bạn tự do xóa tất cả các dữ liệu được xuất hiện mà không lo nữa.
Chúc bạn thành công
Cách 1 --=0 làm xong há mồm, hoa mắt.
Cách 2 -\\/. ok rùi, chạy ngon nhưng xử lý lâu quá. mới có hơn 40.000 bản ghi một cột chạy 15 phút vẫn chưa xử lý xong. làm kiểu của DK ok nhưng khi các số trùng nhau sẽ bị -1 em đổi tí F3= IF(COUNTIF($A$3:A3,A3)=1,MAX($A$3:A3),0) chạy ok rùi.
thanks bác
 
Lần chỉnh sửa cuối:
Chạy gần 1 tiếng rùi vẫn chưa xong :( bó tay, bác nào có giải pháp nào khách nhanh hơn mách em cái !$@!!
 
hiii. mình chỉ biết có vậy thui. bạn có thể insert thêm 1 cột kế bên cột bạn cần tìm dữ liệu trùng rồi nhập công thức mình chỉ. Sau đó bạn đừng kéo chuột mà double lick vào ô công thức bạn vừa nhập. thế là công thức tự động copy đến dòng cuối cùng luôn.
Lưu ý phải đảm bảo cột bên tay trái của bạn tất cả các cell đều có dữ liệu hoặc có công thức mới được. còn nếu không khi double lick nó chỉ copy đến dòng có dữ liệu cuối cùng. nhưng dòng để trống sẽ không được copy tiếp đâu.
bạn làm thử nhé
 
mình bổ sung thêm âấn đầe khi double lick nghen. để kiểm tra chắc chắn lệnh copy này nó có được copy xuống tới cái dòng thứ 40.000 gì đó của bạn kkhông. bạn lick chuột cào ô đầu tiên sau khi nhập công thức và double lick. Bạn nhấn tổ hợp phím Ctrl và dấu mũi tên đi xuống. nếu ô hiển thị là ô cuối cùng trong cột bạn cần trích dữ liệu trùng thì ok. nếu nằm ở giữa lưu chừng thì bạn copy nó xuống và cứ tiếp theo double lick và kiểm tra như mình chỉ. đảm bảo sẽ nhanh hơn rất chi là nhiều.
 
Bạn có thể làm như sau:
Bôi đen vùng dữ liệu cần lọc.
Chọn Data\filter\Advanced filter
Chọn Copy to another lcation.
Trong vùng list range bạn chọn vùng dữ liệu cần lọc.
Trong vùng Criteria range bạn bỏ trống
Trong vùng Copy to bạn chọn nơi chứa dữ liệu sau khi lọc.
Chọn Unique records only.
Sau đó nhấn OK là xong.
 
Bạn có thể làm như sau:
Bôi đen vùng dữ liệu cần lọc.
Chọn Data\filter\Advanced filter
Chọn Copy to another lcation.
Trong vùng list range bạn chọn vùng dữ liệu cần lọc.
Trong vùng Criteria range bạn bỏ trống
Trong vùng Copy to bạn chọn nơi chứa dữ liệu sau khi lọc.
Chọn Unique records only.
Sau đó nhấn OK là xong.
Em đã làm cách của bác nhưng nó copy y nguyên sang chứ không lọc các số trùng nhau được
 
mình bổ sung thêm âấn đầe khi double lick nghen. để kiểm tra chắc chắn lệnh copy này nó có được copy xuống tới cái dòng thứ 40.000 gì đó của bạn kkhông. bạn lick chuột cào ô đầu tiên sau khi nhập công thức và double lick. Bạn nhấn tổ hợp phím Ctrl và dấu mũi tên đi xuống. nếu ô hiển thị là ô cuối cùng trong cột bạn cần trích dữ liệu trùng thì ok. nếu nằm ở giữa lưu chừng thì bạn copy nó xuống và cứ tiếp theo double lick và kiểm tra như mình chỉ. đảm bảo sẽ nhanh hơn rất chi là nhiều.
Mình đã cố gắng và đã xong :( khi tắt file đi rùi bật lại hình như nó xử lý lại các câu lệnh lọc, đợi từ 12h trưa đến giờ gần 3 tiếng rùi vẫn chưa mở ra được. file này là dữ liệu mật của công ty nên em không dám up lên, không phải em không tin các bác mà em ngại ko may có chuyện gì phức tạp lắm các bác thông cảm. đây là list DS Điện thoại có khoảng 80.000 cuộc gọi nhìu số trùng nhau quá nên sếp em bắt lọc bớt
 
tại file bạn nặng quá còn sao nữa mình cũng không rõ. Tuy nhiên sau khi gõ công thức, copy bằng cáhch double lick cho nhanh, bạn vào auto fỉlte đễ lọc trùng. Bạn xóa tât cả các dữ liệu được hiện ra kể cả công thức được copy ý.
sau đó, bạn chọn lại chữ all trong nút mũi tên của cột vừa chọn. bạn delte nguyên cái cột có công thức mà mình chỉ bạn cho file nó nhẹ. kế tiếp vào data, gỡ bỏ auto filter.
cuối cùng, bạn bôi den tất cả vùng dữ liệu của bạn nhưng không lấy dòng tiêu đề. rồi vào data/ sort, chọn no header row trong phần My data range has; trong phần sort by, bạn chọn ascending và nhấp vào mũi tên chọn column nào bạn muốn sort rồi ok. như vậy dữ liệu bạn được sắp xếp lại và file cũng nhẹ hẳn đi.
Hoặc có thể khi chọn ra dữ liệu trùng, bạn bôi đen nguyên dòng và vào delte row luôn thì nó tiện, bạn khỏi aất công sort lại. đó là những cáh mình hay dùng. chúc bạn thành công
 
Em cũng có nhu cầu lọc dữ liệu tương tự như trên. Nhưng trong File đó chi có 3 mã để lựa chon, em muốn có được nhiều mã để chon hon nữa thi phải làm cách nảo để có thể cho thêm vảo hả các bác?
 
Từ Cột A và cột B, làm thế nào để ra được cột C này các bác nhỉ? (em chụp mà sao hình xấu quá, các bác thông cảm, xem tạm dùm em nhé.)-\\/.-\\/.-=.,,
 

File đính kèm

  • trung.JPG
    trung.JPG
    74.4 KB · Đọc: 189
Lần chỉnh sửa cuối:
Lọc dữ liệu trùng có điều kiện

Mình mmuốn lọc dữ liệu có hai điều kiên xin các bác chỉ giáo
Xin cảm ơn!
 

File đính kèm

Mình mmuốn lọc dữ liệu có hai điều kiên xin các bác chỉ giáo
Xin cảm ơn!

Ý của bạn là sao, mình đâu thấy kết quả mong muốn của bạn đâu?
Có phải ý của bạn là trích lọc ra dữ liệu không trùng nhau về mã hàng và số lượng phải không?
 
Từ Cột A và cột B, làm thế nào để ra được cột C này các bác nhỉ? (em chụp mà sao hình xấu quá, các bác thông cảm, xem tạm dùm em nhé.)-\\/.-\\/.-=.,,
Bạn hỏi như thế thì thánh cũng không trả lời đc. Bạn thử nói yêu cầu của bạn, hoặc post công thức ở cột C lên. Mọi người sẽ giải thích giúp bạn.
 
Mình mmuốn lọc dữ liệu có hai điều kiên xin các bác chỉ giáo
Xin cảm ơn!
Trước tiên bạn tạo 1 vùng có 2 dòng 2 cột, dòng 1 cột 1 là Loại hàng, cột 2 là giá, dòng 2 cột 1 là đk 1 (ví dụ a), cột 2 là đk 2 (ví dụ 15). Bạn dùng Data -> Fỉlte -> Advanced, trong List range chọn vùng cần trích (vd $C$3:$D$10), Criteria range chọn vùng đk mà bạn đã tạo, chọn Copy to another... ,trong Copy to chọn nơi mà bạn muốn thể hiện kq, OK. (Chọn Unique... để ko hiện những gtrị trùng nhau). Thử xem coi có đúng ý bạn muốn ko nhé! /*+
 
Lần chỉnh sửa cuối:
lọc dữ liệu trùng thỏa mãn hai điều kiện

Xin lỗi minh chưa có kinh nghệm nên bạn chưa hiểu ý !
ý của mình là : hàng a có hai loai cần lấy là giá
progress.gif
 

File đính kèm

Xin lỗi minh chưa có kinh nghệm nên bạn chưa hiểu ý !
ý của mình là : hàng a có hai loai cần lấy là giá
progress.gif
:-= Hình như bạn đưa ví dụ vẫn sai thì phải, tại 'E7:E8' ý!

Bạn thử dùng mảco sau:
PHP:
Option Explicit
Sub FilterAll()
 Dim lRow As Long, Ww As Long, Zz As Long
 
 lRow = Sheet1.[c65432].End(xlUp).Row
 ReDim Mang(4 To lRow) As Boolean
 For Ww = 4 To lRow
   For Zz = Ww + 1 To lRow + 1
      If Not Mang(Ww) Then _
         Cells(Ww, "E").Resize(, 2) = Cells(Ww, "C").Resize(, 2).Value
      If Cells(Zz, "C") = Cells(Ww, "C") And Cells(Zz, "D") = Cells(Ww, "D") Then _
         Mang(Zz) = True
   Next Zz
 Next Ww
End Sub
 
Bạn có thể dùng cột phụ.
Tại ô E4: =C4&D4
Tại ô F4: ==COUNTIF($G$4:G4,G4)
Fill xuống và lọc các dòng có số 1 bên cột F
 
Có nhiều cách swr lý cái này:
1 - Dùng cột phụ như huuthang_bd đã nêu
2 - Lọc nâng cao: VD chọn cột hàng hóa loại hàng hóa "b", cột giá có thể nhấp chuột và mũi tên đổ xuống chọn Number Filters từ đó có thể chọn các điều kiện: lớn hơn, nhỏ hơn, trong khoảng, bằng, v.v
 
Lọc số liệu trùng

Hi All,
Tôi có chút vướng mắc trong việc lọc dữ liệu số trùng nhau. Rất mong nhận được hướng dẫn:
Nội dung cần lọc như sau:
Tôi có 2 cột số liệu: cột A và cột B
Cột A chứa khoảng 100.000 số (VD: A1= 123456; A2=654321; A3=123789; A4=456789 ...)
Cột B chứa khoảng 50.000 số (VD: B1=654321; B2=456789; ...)
Cột A và Cột B chứa các số trùng nhau (VD: Số lượng số trùng nhau của 2 cột là 20.000 số, ở các vị trí khác nhau. Tôi muốn nhận được hướng dẫn về việc lọc bỏ tất cả các số trùng nhau ở cột A và cột B. Tôi cần dữ lại số liệu của cột A là các số không trùng với các số ở cột B.
Thanks.
 
Tại C1 bạn nhập công thức sau:
Mã:
 =if(Countif(A1,$B$1:$B)>0,"",A1)
Fill xuống cho tất cả các dòng.
 
Lần chỉnh sửa cuối:
Hi All,
Nội dung cần lọc như sau:
Tôi có 2 cột số liệu: cột A và cột B
Cột A chứa khoảng 100.000 số (VD: A1= 123456; A2=654321; A3=123789; A4=456789 ...)
Cột B chứa khoảng 50.000 số
Cột A và Cột B chứa các số trùng nhau (VD: Số lượng số trùng nhau của 2 cột là 20.000 số, ở các vị trí khác nhau. Tôi muốn nhận được hướng dẫn về việc lọc bỏ tất cả các số trùng nhau ở cột A và cột B.
Tôi cần dữ lại số liệu của cột A là các số không trùng với các số ở cột B.
Thanks.
Chắc cái này trong E2007 rồi, phải tránh thôi, vì mình chưa có xài qua!
 

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

Back
Top Bottom