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

Liên hệ QC

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

  • loc du lieu trung.xls
    21.5 KB · Đọc: 2,021
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

  • Mau loc du lieu.xls
    67 KB · Đọc: 293
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

  • Locdulieu.rar
    11.1 KB · Đọc: 745
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

  • GPECOM.rar
    13.7 KB · Đọc: 389
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:
Web KT
Back
Top Bottom