PDA

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



Pages : [1] 2 3

DVC's student
03-05-07, 09:05 AM
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.

ThuNghi
03-05-07, 10:51 AM
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.

WhoamI
03-05-07, 10:59 AM
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

Mr Okebab
03-05-07, 11:14 AM
Đây là sử dụng Advanced Filter :
http://www.giaiphapexcel.com/forum/showthread.php?t=1234
Addvance Filter for List.zip (http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=720&d=1167280875)

Có thể làm nhiều cách.
Lọc bình thường hay dùng Advance Filter cũng được
Bạn xem nhé:

Thân!

digita
03-05-07, 11:28 AM
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.

SA_DQ
21-01-08, 11:34 AM
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:
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:


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

zinzin
27-02-08, 11:22 AM
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

ptm0412
27-02-08, 12:58 PM
Về Pivot table:
http://www.giaiphapexcel.com/forum/showthread.php?p=41010#post41010

TranThanhPhong
28-02-08, 08:28 AM
Bạn xem bài 2 nhé;

http://www.giaiphapexcel.com/forum/showpost.php?p=33205&postcount=2

TP.

hoangdanh282vn
01-03-08, 12:48 PM
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.

ngo15
22-03-08, 11:39 AM
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

Romeo8x
23-03-08, 05:39 PM
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?

Tunguyen
24-03-08, 07:17 PM
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.

anhtuan1066
24-03-08, 07:55 PM
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

Tunguyen
25-03-08, 10:03 AM
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.

anhtuan1066
25-03-08, 10:14 AM
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

Tunguyen
25-03-08, 10:21 AM
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.

SA_DQ
25-03-08, 11:21 AM
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
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!

Tunguyen
26-03-08, 03:40 PM
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.

SA_DQ
26-03-08, 04:24 PM
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.


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

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.


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

vungoc
26-03-08, 09:45 PM
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!

Mr Okebab
26-03-08, 10:51 PM
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!

levanduyet
26-03-08, 11:02 PM
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

anhtuan1066
27-03-08, 12:24 PM
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 Filter và 2. Ẩ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

sanhdieu007
06-04-08, 11:48 AM
Chào DVC's student (http://www.giaiphapexcel.com/forum/member.php?u=2399) !
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!

dvngoc
14-05-08, 01:26 PM
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.

cadafi
14-05-08, 01:56 PM
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.

hoangdanh282vn
14-05-08, 03:51 PM
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.

Bạn xem thử File này coi có đúng ý bạn không

dvngoc
14-05-08, 04:04 PM
À, 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.

le tin
14-05-08, 10:00 PM
Bạn xem thử File này coi có đúng ý bạn không
Cách của bạn hay lắm nhưng só lượng lên 2000 dòng , không biết có chậm không?

SA_DQ
15-05-08, 06:17 AM
Cách của bạn hay lắm nhưng só lượng lên 2000 dòng , không biết có chậm không?
http://www.giaiphapexcel.com/forum/showthread.php?t=8770&page=2#33

quachhuydinh
15-05-08, 03:53 PM
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 !!!

tigertiger
15-05-08, 05:43 PM
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,
.

hoangdanh282vn
15-05-08, 06:28 PM
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.

hoangdanh282vn
17-05-08, 08:08 AM
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

SA_DQ
17-05-08, 10:19 AM
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?

levanduyet
18-05-08, 07:32 PM
À đâ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

tiencruise
20-05-08, 10:22 PM
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!

anhtuan1066
21-05-08, 10:44 AM
Đế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

tiencruise
21-05-08, 11:22 AM
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

anhtuan1066
21-05-08, 11:34 AM
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

SA_DQ
21-05-08, 01:25 PM
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



So Cont Dem
A,B,C 3
D 1
F 1
E,G 2
A,G 0
B,C,H 1

tiencruise
21-05-08, 01:52 PM
Em gởi cho anh nhé, Support em cái

anhtuan1066
21-05-08, 04:34 PM
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!

phamduylong
21-05-08, 05:49 PM
Thử hàm này xem. Chú ý đối số rText là vùng các ô cầ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

hoangdanh282vn
21-05-08, 05:58 PM
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!$@!!

SA_DQ
21-05-08, 07:14 PM
Các bác VBA hãy cùng cố lên!$@!!

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

anhtuan1066
21-05-08, 09:02 PM
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

tiencruise
21-05-08, 10:08 PM
--=0Có thể giúp mình tạo một hàm riêng cho excell được ko?

SA_DQ
21-05-08, 11:45 PM
--=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


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

tiencruise
22-05-08, 08:17 AM
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.

boyxin
22-05-08, 08:52 AM
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.

SA_DQ
22-05-08, 11:05 AM
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!)

hoangdanh282vn
22-05-08, 12:08 PM
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

DOSNET
22-05-08, 12:19 PM
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 !

hoangdanh282vn
22-05-08, 12:40 PM
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

voda
22-05-08, 02:59 PM
Mình góp thêm một chút cho vui.
Hàm đếm số trong từng ô:


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:


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

hoangdanh282vn
22-05-08, 05:13 PM
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.

anhtuan1066
22-05-08, 09:27 PM
5 cont thì còn đở... Lở mà nó có đến 20 cont thì... công thức đói luôn!
Hic...

SA_DQ
23-05-08, 09:11 AM
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!


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

voda
23-05-08, 01:14 PM
-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.

Mr Okebab
02-06-08, 06:50 PM
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

tiencruise
04-06-08, 03:53 PM
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.

hoangdanh282vn
04-06-08, 05:38 PM
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.

hanhủe08
24-06-08, 01:25 PM
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.

duongdv
24-06-08, 01:31 PM
Bạn vào các link sau tham khảo bài của các thành viên
http://www.giaiphapexcel.com/forum/archive/index.php/t-4812.html
http://www.giaiphapexcel.com/forum/archive/index.php/t-9456.html

hoangdanh282vn
24-06-08, 01:36 PM
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.

hanhủe08
24-06-08, 02:40 PM
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

cadafi
24-06-08, 02:51 PM
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:


=If(Countif($A$2: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!

huycuongxd
24-06-08, 03:23 PM
Bạn dùng chế độ AutoFilter mà xoá!

yeudoi
24-06-08, 03:38 PM
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.

ndu96081631
24-06-08, 06:12 PM
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.
Cách này nhanh nhất, dể nhất và hiệu quả nhất. Thích hợp cho dử liệu lớn

vitquay
18-08-08, 10:34 AM
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-/.

hong gam
18-08-08, 10:57 AM
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

vitquay
18-08-08, 11:26 AM
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

vitquay
18-08-08, 11:57 AM
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 !$@!!

Kế Toán Già Gân
18-08-08, 12:16 PM
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 !$@!!

Bạn có thể up file lên để các thành viên hỗ trợ.
Thân

hong gam
18-08-08, 12:20 PM
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é

hong gam
18-08-08, 12:31 PM
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.

quangnd1980
18-08-08, 02:25 PM
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.

vitquay
18-08-08, 02:54 PM
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

vitquay
18-08-08, 02:57 PM
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

hong gam
18-08-08, 03:36 PM
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

hungnt
07-09-08, 01:35 AM
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?

lolem822000
15-09-08, 12:46 PM
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é.)-\\/.-\\/.-=.,,

ducdien
16-09-08, 11:11 AM
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!

hoangdanh282vn
16-09-08, 11:17 AM
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?

hanhpptc
16-09-08, 01:48 PM
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!
Bạn quét chon khối ô tiêu đề, sau đó vào Data/Filter/AutoFilter
Khi bạn muốn lọc thì chọn cột có mũi tên.

huuthang_bd
16-09-08, 02:07 PM
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.

Yin.kn
16-09-08, 03:59 PM
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é! /*+

ducdien
17-09-08, 05:56 AM
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á

http://www.giaiphapexcel.com/forum/images/styles/Smart/misc/progress.gif

HYen17
17-09-08, 06:29 AM
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áhttp://www.giaiphapexcel.com/forum/images/styles/Smart/misc/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:


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

huuthang_bd
17-09-08, 08:21 AM
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

trantoi
17-09-08, 04:51 PM
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

dungvc
18-09-08, 05:20 PM
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.

huuthang_bd
18-09-08, 06:01 PM
Tại C1 bạn nhập công thức sau:

=if(Countif(A1,$B$1:$B)>0,"",A1)
Fill xuống cho tất cả các dòng.

rollover79
18-09-08, 10:00 PM
Tại C1 bạn nhập công thức sau:

=if(Countif(A1,$B$1:$B)>0,"",A1)Fill xuống cho tất cả các dòng.
Công thức này bạn đã thử dùng qua chưa? sao mình thấy có vấn đề gì đấy ko ổn//////

bangkd
18-09-08, 11:21 PM
Công thức này bạn đã thử dùng qua chưa? sao mình thấy có vấn đề gì đấy ko ổn//////

Công thức này lỗi ở fần Countif
Dạng thưc của Countif(vùng ước lượng, điều kiện)

cadafi
19-09-08, 12:09 AM
Tại C1 bạn nhập công thức sau:

=if(Countif(A1,$B$1:$B)>0,"",A1)Fill xuống cho tất cả các dòng.

Hình như cái này ngược rồi! Phải như thế này mới được:

=if(Countif($B:$B,A1)>0,"",A1)Mà làm sao làm được Countif(A1,$B$1:$B) nhỉ?

Ngắn gọn hơn chỉ cần:

=A1*NOT(COUNTIF($B:$B,A1)>0)

ChanhTQ@
19-09-08, 05:44 AM
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!

tigertiger
19-09-08, 12:37 PM
Ngắn gọn hơn chỉ cần:
Trích:
=A1*NOT(COUNTIF($B:$B,A1)>0)


thế thì A1 có giá trị =0 thì không dùng được,

huuthang_bd
19-09-08, 01:47 PM
Hình như cái này ngược rồi! Phải như thế này mới được:

=if(Countif($B:$B,A1)>0,"",A1)Mà làm sao làm được Countif(A1,$B$1:$B) nhỉ?
Sorry! Mình nhầm cú pháp. Hôm qua vào thấy câu hỏi đơn giản nên reply luôn không text trên Excel nên bị nhầm.
Thank!

HYen17
19-09-08, 01:52 PM
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!
Trong các cột 'C' & 'D' ta có khoảng 100.000 số khác nhau;
Và trên cột 'A' ta có 50.000 số khác nhau, mà ta biêt rằng 20.000 số trong cột 'A' trùng với các số trong cột 'C' hoặc 'D'

Hãy lập danh các số không trùng giữa 'A' với 'C' & 'D' tại 'F' & 'G'!
Xin mời các nhà 'Siêu Công Thức' ra tay tiếp!

Xin cảm ơn các bạn quan tâm!
Chúc sức khỏe!:-=)(&&@@--=--

kokohan
20-09-08, 03:14 PM
Tình hình là em có cái file này nhờ các cao nhân chỉ giáo hộ em.
Trong cái file mẫu này mấy cái dòng em đánh dấu màu giống nhau là những ô có dữ liệu trùng nhau.
Vấn đề đặt ra bây giờ là làm sao mà phát hiện và bỏ đi những dòng trùng để xử lý dữ liệu chính xác. Cơ sở dữ liệu của em nó khoảng hơn mấy trăm nghìn dòng nên không thể phát hiện vào xóa bằng tay được.
EM xin cảm ơn các bác

sealand
20-09-08, 04:19 PM
Bạn chọn 1 cột trống nối tất cả các cột lại để kiểm tra (Chắc chắn số liệu trong từng cột hoàn toàn giống nhau.) Sau đó dùng hàm contif đếm giá trị trong từng ô nối, và lọc theo điều kiện số đếm >1.Trước khi lọc nên sort lại để dữ liệu trùng nằm kề nhau.
Có 1 cách nữa nhanh hơn, bạn chèn lên trên cùng 2-3 dòng. Chép dòng tiêu đề dán vào dòng 1 dòng 2 để trống.
Vào Advance filter chọn vùng lọc là vùng dữ liệu và vùng tiêu chuẩn là các ô tương ứng tại dòng 1 và 2, nhớ nháy vào unique record only. Như vậy ta đwợc dữ liệu duy nhất và chép ra chỗ khác là xong

HYen17
20-09-08, 04:27 PM
Option Explicit
Sub XoaTrung()
Dim lRow As Long, Ww As Long
Dim dRng As Range
Columns("A:A").Select: Selection.Insert Shift:=xlToRight
[A1] = "TT": lRow = Cells(Rows.Count, "B").End(xlUp).Row
For Ww = 2 To lRow
Cells(Ww, "A") = Ww - 1
Next Ww
Sort2Column [H2], [a2]
For Ww = 3 To lRow
With Cells(Ww, "H")
If .Value = .Offset(-1) And .Offset(, 1) = .Offset(-1, 1) _
And .Offset(, -5) = .Offset(-1, -5) Then
If dRng Is Nothing Then
Set dRng = .Offset()
Else
Set dRng = Union(dRng, .Offset())
End If
End If
End With
Next Ww
'MsgBox dRng.Address'
dRng.EntireRow.Select: Selection.Delete
Sort2Column [a2], [H2]
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft

End Sub



Sub Sort2Column(Rng1 As Range, rng2 As Range)
Columns("A:N").Select
Selection.Sort Key1:=Rng1, Order1:=xlAscending, Key2:=rng2 _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
End Sub

sealand
20-09-08, 04:47 PM
Mình bổ xung thêm cách lọc Advance Filter

phamduylong
20-09-08, 07:08 PM
Ví dụ dữ liệu là vùng $A$1:$M$24. Lọc bằng Advance Filter với các mục chọn:
+ Copy to another location
+ List range: $A$1:$M$24
+ Criteria range: bỏ trống
+ Copy to: $O$1
+ Unique records only
Nó sẽ lọc các dòng dữ liệu không trùng sang ô O1.

Dùng VBA:


Sub AdvancedFilter()
cc = Cells(1, 1).End(xlToRight).Column
rdt = Cells(1, 1).End(xlDown).Row
Set data = Range(Cells(1, 1), Cells(rdt, cc))
Range(Cells(1, cc + 2), Cells(Cells.Rows.Count, Cells.Columns.Count)).ClearContents
data.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Cells(1, cc + 2), Unique:=True
rfl = Cells(1, cc + 2).End(xlDown).Row
Range(Cells(1, cc + 2), Cells(rdt, cc * 2 + 1)).Copy Cells(1, 1)
Range(Cells(1, cc + 2), Cells(rdt, cc * 2 + 1)).ClearContents
Set data = Nothing
End Sub

Nó tự động xác định vùng lọc, lọc, xóa dữ liệu cũ và thay bằng dữ liệu đã lọc

ndu96081631
21-09-08, 04:30 PM
Sao không dùng Advanced Filter cho gọn nhỉ?


Sub LocTrung()
Dim Rng As Range
[A1].CurrentRegion.Clear
Set Rng = Sheet1.[A1].CurrentRegion
Rng.AdvancedFilter Action:=2, CopyToRange:=[A1], Unique:=True
End Sub

nguyendunghh2
22-09-08, 12:41 AM
trích lọc không trùng nhau trong một cột , cứu cứu !
Các bác, anh chị, các cao thủ giúp em. Em có một cột (3635 row)chứa các số điện thoại nhưng trong đó có những số trùng nhaum vậy làm cách nào để trích ra các số "không trùng nhau, các số trùng nhau thì lấy 1 lần thôi !
xin giúp em ! thanks!

ChanhTQ@
22-09-08, 05:50 AM
trích lọc không trùng nhau trong một cột , cứu cứu !
Các bác, anh chị, các cao thủ giúp em. Em có một cột (3635 row)chứa các số điện thoại nhưng trong đó có những số trùng nhaum vậy làm cách nào để trích ra các số "không trùng nhau, các số trùng nhau thì lấy 1 lần thôi !
xin giúp em ! thanks!
Bạn hãy đến đây:
http://www.google.com.vn/custom?hl=vi&cof=&domains=www.giaiphapexcel.com&sitesearch=www.giaiphapexcel.com&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=advanced+Filter&spell=1

email.hvt
22-09-08, 09:27 AM
Bạn thử dùng cách này xem:
b1. Sắp xếp cột đó theo 1 thứ tự tăng hoặc giảm dần
b2. Dùng hàm if để so sánh xem dữ liệu hàng trên và hàng dưới nếu bằng nhau thì gán cho một giá trị
b3. Sắp xếp lại 2 cột đó theo cột vừa lấy giá trị của hàm if là ok

hong gam
22-09-08, 12:34 PM
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 sử dụng auto filter, bạn không chọn gì khác ngoài chọn non Blanks).
Chúc bạn thành công

hoangdanh282vn
22-09-08, 12:58 PM
trích lọc không trùng nhau trong một cột , cứu cứu !
Các bác, anh chị, các cao thủ giúp em. Em có một cột (3635 row)chứa các số điện thoại nhưng trong đó có những số trùng nhaum vậy làm cách nào để trích ra các số "không trùng nhau, các số trùng nhau thì lấy 1 lần thôi !
xin giúp em ! thanks!

BẠn vào link dười chữ ký của mình, sẽ có vài VD để bạn tham khảo

kokohan
22-09-08, 04:53 PM
Ví dụ dữ liệu là vùng $A$1:$M$24. Lọc bằng Advance Filter với các mục chọn:
+ Copy to another location
+ List range: $A$1:$M$24
+ Criteria range: bỏ trống
+ Copy to: $O$1
+ Unique records only
Nó sẽ lọc các dòng dữ liệu không trùng sang ô O1.



Đúng là ngày nào mình cũng dùng Advance mà toàn lọc một hàng, cách của bạn hay thật. Cảm ơn bạn

btlinh
07-10-08, 03:20 PM
Chào các bác,
Em không chuyên nhưng cũng xin đưa lời giải sau (theo đề bài của bác DungVC):
1. lấy ra số ở cột A khác với số ở cột B:
- tại ô C1 gõ lệnh =IF(COUNTIF($B$1:$B$5,A1),"",A1) Enter rồi kéo ...
tìm kiếm trong cột B và tham chiếu với ô A1, nếu trùng (giống) thì bỏ qua (chèn ký tự chống), ngược lại thì đưa ra ô A1.
2. lấy ra số ở cột B khác với số ở cột A:
- tại ô D1 gõ lệnh =IF(COUNTIF($A$1:$A$5,B1),"",B1) Enter rồi kéo ...
Chúc vui.

anhtuan3a
01-11-08, 03:05 AM
Em có 1 file Exel, có 2 vùng dữ liệu V1 và V2 ban đâu giống nhau, nhưng sau đó vùng V2 hàng ngày có sự thay đổi giá trị. Vậy em phải dùng hàm gì để lọc và thấy được sự thay đổi này vậy? EM là thành viên mới, mong các bác chỉ giúp. Thanks.

sealand
01-11-08, 07:41 AM
Mình tham gia cách đơn giản nhất là:
Lựa 1 số cột mang tính chất đặc thù riêng của từng dòng, ví dụ như mã hàng, mã khách, số phiếu, ID... dùng hàm match hay Vlookup để tìm trong bảng tương ứng. Tất cả các dòng lỗi là thay đổi giữa hai bảng thể hiện biến động:
-Lỗi ở bảng cố định thì tại bảng biến động đã xóa mất dòng này hoặc sửa.
-Lỗi ở bảng biến động là thêm mới hoặc sưa.
Bạn thử xem sao nhé.

lvdunght
01-11-08, 12:44 PM
Bạn đặt ở cột v3 lệnh sau: =if(v1=v2,Trùng, không trùng) và copy cho toàn bộ các ô trong cột v3. Sau đó bạn dùng autofill để lọc ở cột v3 "trùng" thì sẽ biết được những dòng nào trong v1 và v2 trùng nhau.

lmtuong
12-11-08, 03:44 PM
Chào các bạn,

Mình có một vấn đề cần giúp đỡ. Có bạn nào biết cách rút trích dữ liệu từ file dữ liệu thô không? Mình có gửi file đính kèm và mong nhận được sự giúp đỡ của các bạn.

DOSNET
12-11-08, 04:10 PM
Chào các bạn,

Mình có một vấn đề cần giúp đỡ. Có bạn nào biết cách rút trích dữ liệu từ file dữ liệu thô không? Mình có gửi file đính kèm và mong nhận được sự giúp đỡ của các bạn.
Bạn nên tách 2 cột thời gian IN và OUT. Tạm thời như thế này vì thời gian IN thường <12h và OUT>12h.

huuthang_bd
12-11-08, 04:38 PM
Chào các bạn,

Mình có một vấn đề cần giúp đỡ. Có bạn nào biết cách rút trích dữ liệu từ file dữ liệu thô không? Mình có gửi file đính kèm và mong nhận được sự giúp đỡ của các bạn.

Bạn xem thử file đính kèm nha. Mình dùng một cột phụ ở sheet Data. Khi muốn thống kê dữ liệu thêm cho những ngày khác thì bạn copy 3 cột E, F, G qua và sửa ngày lại nhé.

P/S: Mình xin góp ý thêm là bạn nên lập Repost theo số phòng chứ không nên lập theo tên khách hàng như thế. Vì giả sử mỗi ngày mỗi phòng là một khách mới, mà bạn có vài chục phòng thì một tháng bạn phải theo dõi hàng trăm khách àh!!!

lmtuong
12-11-08, 04:47 PM
Chào DOSNET,

Cám ơn bạn đã giúp đỡ nhưng cho mình hỏi thêm một câu nhé, nếu dữ liệu thô của mình có từ ngày 01-Nov-08 đến hết ngày 30-Nov-08, vậy công thức của bạn có cần phải chỉnh sửa gì nữa không? Nhờ bạn kiểm tra rồi sửa lại dùm mình nhé.

Cám ơn bạn DOSNET.

DOSNET
12-11-08, 04:49 PM
- Dữ liệu mình làm sẵn cho bạn với 1000 dòng chờ bên dữ liệu thô, muốn thêm ngày bạn chỉ cần copy 3 cột C,D và E chẳng hạn cho các ngày tiếp theo.
Bạn dùng bài này với công thức mảng, ngắn gọn và chính xác hơn trong trường hợp IN và OUT bất kỳ. Thân !

lmtuong
12-11-08, 05:38 PM
Cám ơn bạn DOSNET và HuuThang_BD.

Bạn DOSNET cho mình hỏi, nếu mình muốn sử dụng đến dòng thứ 65536 cho Date, Name và Time thì mình sửa ở đâu.

Cám ơn bạn DOSNET.

ndu96081631
12-11-08, 06:04 PM
Tôi thấy cách bố trí dử liệu như ở sheet Data mới là chuẩn chứ (chỉ cần sửa lại như DOSNET nói: Chia IN/OUT ra làm 2 cột)
Khi ấy muốn truy xuất bất kỳ Tên nào, ngày nào, giờ nào cũng là việc rất dể dàng (dùng Advanced Filter)... chứ ai lại bố trí dử liệu theo kiểu sheet Report chứ... Nếu theo dỏi khoảng thời gian 90 ngày thì.. bó tay à?

DOSNET
12-11-08, 09:45 PM
Cám ơn bạn DOSNET và HuuThang_BD.

Bạn DOSNET cho mình hỏi, nếu mình muốn sử dụng đến dòng thứ 65536 cho Date, Name và Time thì mình sửa ở đâu.

Cám ơn bạn DOSNET.
Bạn sửa lại name là Ok, vào Insert\name\define và sửa lại vùng dữ liệu. Tuy nhiên mình tán thành cách làm đơn giản như a Ndu, dùng công cụ có sẵn của Excel là Avanced Filter cho đơn giản ! Hơn nữa bạn sẽ gặp rắc rối khi số lượng ngày phải theo dõi quá lớn (không đủ số cột).


date=Data!$B$5:$B$65000
name=Data!$G$5:$G$65000
time=Data!$C$5:$C$65000

huuthang_bd
13-11-08, 09:22 AM
Tôi thấy cách bố trí dử liệu như ở sheet Data mới là chuẩn chứ (chỉ cần sửa lại như DOSNET nói: Chia IN/OUT ra làm 2 cột)
Khi ấy muốn truy xuất bất kỳ Tên nào, ngày nào, giờ nào cũng là việc rất dể dàng (dùng Advanced Filter)... chứ ai lại bố trí dử liệu theo kiểu sheet Report chứ... Nếu theo dỏi khoảng thời gian 90 ngày thì.. bó tay à?


Bạn xem thử file đính kèm nha. Mình dùng một cột phụ ở sheet Data. Khi muốn thống kê dữ liệu thêm cho những ngày khác thì bạn copy 3 cột E, F, G qua và sửa ngày lại nhé.

P/S: Mình xin góp ý thêm là bạn nên lập Repost theo số phòng chứ không nên lập theo tên khách hàng như thế. Vì giả sử mỗi ngày mỗi phòng là một khách mới, mà bạn có vài chục phòng thì một tháng bạn phải theo dõi hàng trăm khách àh!!!

Xem lại nhé. Đọc kỹ rồi hãy cho ý kiến.

DOSNET
13-11-08, 09:58 AM
Xem lại nhé. Đọc kỹ rồi hãy cho ý kiến.

Mỗi người một ý kiến đóng góp, có sao đâu bạn !


P/S: Mình xin góp ý thêm là bạn nên lập Repost theo số phòng chứ không nên lập theo tên khách hàng như thế. Vì giả sử mỗi ngày mỗi phòng là một khách mới, mà bạn có vài chục phòng thì một tháng bạn phải theo dõi hàng trăm khách àh!!!

Theo mình thì cậu nhầm thì đúng hơn, vì đây không phải là file quản lý phòng của khách sạn. Nếu không nhầm đây là dữ liệu được lấy từ máy quẹt thẻ của công nhân khi vào ca SX !

lmtuong
13-11-08, 10:32 AM
Chào bạn HuuThang_BD và bạn DOSNET,

Bạn DOSNET nói đúng, đây là dữ liệu của máy quẹt thẻ nên làm theo cách của DOSNET đã hướng dẫn thì ổn mà vì dữ liệu cần làm trong tháng thôi. Có cách hơi bất tiện là dữ liệu nhiều thì cách làm này hơi chậm vì nó phải update lại toàn bộ nội dung mới.

Cám ơn sự giúp đỡ của bạn HuuThang_BD va DOSNET.

cao mạnh sơn
13-11-08, 09:37 PM
Chào các bạn,

Mình có một vấn đề cần giúp đỡ. Có bạn nào biết cách rút trích dữ liệu từ file dữ liệu thô không? Mình có gửi file đính kèm và mong nhận được sự giúp đỡ của các bạn.
Góp thêm với các bạn 1 cách sử dụng Pivot để lọc danh sách sau đó dùng công thức Index,sumif,match để tính toán cho nhẹ File.Đảm bảo với dữ liệu lớn không bị ì ạch.
Trong Sheet Data dữ liệu ở đây là chuẩn,trong trường hợp nếu có ai đó quên không quét thẻ khi đến làm việc hoặc khi về,lúc đó sẽ có lỗi,bạn thử xóa 1 dữ liệu In hoặc Out và quan sát lại bên Sheet Report sẽ hiểu rõ,khi đó cần khải kiểm tra lại dữ liệu Thô của bạn xuất ra.

dieptrucgiang
17-11-08, 03:16 PM
Em có 1 file Exel, có 2 vùng dữ liệu V1 và V2 ban đâu giống nhau, nhưng sau đó vùng V2 hàng ngày có sự thay đổi giá trị. Vậy em phải dùng hàm gì để lọc và thấy được sự thay đổi này vậy? EM là thành viên mới, mong các bác chỉ giúp. Thanks.
Bạn Anhtuan 3a thân !
Bạn có thể sử dụng hàm if ở cột V3 như sau : if(v1=v2,"trùng",v1-v2), sau đó bạn chọn vùng v3 vào Data\fiter lọc bỏ số liệu trùng sẽ thấy giá trị của số liệu thay đổi .

whitemouse
18-11-08, 12:12 PM
Bạn Anhtuan 3a thân !
Bạn có thể sử dụng hàm if ở cột V3 như sau : if(v1=v2,"trùng",v1-v2), sau đó bạn chọn vùng v3 vào Data\fiter lọc bỏ số liệu trùng sẽ thấy giá trị của số liệu thay đổi .

Cẩn thận hơn bạn có thể sử dụng format condition để thấy rõ sự thay đổi trong giá trị bị trùng.

kn9ght
05-12-08, 02:00 PM
1. Giả sử ô A2:A40000 có chứa dữ liệu cần tìm trùng nhau:
2. Ô B2 gõ vào:


=If(Countif($A$2: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.

Bạn ơi, nếu cũng áp dụng cách này nhưng là với 2 cột thì sao?
Ví dụ mình để ở trong file kèm đó.
Cảm ơn các bạn nhiều nhiều nhé.

hoangdanh282vn
06-12-08, 12:15 PM
Bạn ơi, nếu cũng áp dụng cách này nhưng là với 2 cột thì sao?
Ví dụ mình để ở trong file kèm đó.
Cảm ơn các bạn nhiều nhiều nhé.

Điều này không thể. Bởi vì :

Nếu ô nào đó trong cột thứ nhất trùng và ô cùng dòng trong cột thứ 2 không trùng thì ta xem cả dòng này là trùng hay không trùng đây? Vừa trùng vừa không trùng làm sao xóa cả dòng được.

tiencruise
13-12-08, 11:26 AM
Em có file như sau:
A
B
C
D
A
D

Em muốn lọc ra, những giá trị nào có mặt thì lấy ra nên kết quả chỉ là
A
B
C
D
Cho dù nó lặp lại bao nhiêu lần nữa thì cũng lấy giá trị đại diện có mặt là được.


Thank you mấy huynh.

cadafi
13-12-08, 11:30 AM
Vấn đề này đã có rất nhiều trên GPE. Bạn chị khó search là thấy ngay thôi!

Một cách đơn giản nhất là dùng Advance Filter! Với Unique record only!

volga
13-12-08, 01:55 PM
Em có file như sau:
A
B
C
D
A
D

Em muốn lọc ra, những giá trị nào có mặt thì lấy ra nên kết quả chỉ là
A
B
C
D
Cho dù nó lặp lại bao nhiêu lần nữa thì cũng lấy giá trị đại diện có mặt là được.


Thank you mấy huynh.

Anh ca_dafi hướng dẩn bạn cách đó rất hay và nhanh.
giới thiệu bạn phương pháp dùng công thức có nhiều trên diển đàn nè

solomon2211
13-12-08, 03:18 PM
Đối với những bảng tính ví dụ như theo dõi nhập xuất hàng hóa hàng ngày. Bạn muốn có được bảng tổng hợp, bạn nên dùng cột phụ với cách đánh số thứ tự cho mỗi mã hàng và trên bảng tổng hợp bạn chỉ dò tìm theo số dòng là có thể lấy ra được mã hàng duy nhất bằng cách tự động mà không phải lọc. Bạn xem thêm bài trả lời về hàm sumproduct cho bạn camchuongden hôm nay,

tiencruise
14-12-08, 07:01 PM
Em thấy trong file co stt, ds, là gì vậy anh. Em gà cái này lắm--=0

Macarong100
17-12-08, 10:33 AM
Chào
Mình có thắc mấc muốn hỏi các huynh và các Tỷ
Mình đính kèm file danh sách chấm điểm.xls
trong sheet tính điểm mình đã có danh sách mã khách hàng (cột D-mã khách hàng là số-VD: 123456) đã được chấm điểm trong các ngày 30/06/07, 31/12/07 , 30/06/08, 30/09/08.
Trong các sheet còn lại có một số khách hàng chưa được tính điểm
tôi muốn lọc ra trong các sheet 30/06/07, 31/12/07 , 30/06/08, 30/09/08-các ngày đó có mã khách hàng nào chưa được tính điểm thì làm như thế nào(mã khách hàng nào đã có trong cột D của sheet "tính điểm" thì không lấy) .}}}}}
mong các huynh giúp đỡ!! (giá trị được lọc ra có thể nằm ở đâu cũng được,có thể là sheet mới)
Regards
Macarong
P/S : mình cần gấp lắm,ai có lời giải mình sẽ gặp nhau uống cà fê cho zui

hàm Vlookup dùng ở đây được không?

DOSNET
17-12-08, 01:02 PM
Chào
Mình có thắc mấc muốn hỏi các huynh và các Tỷ
Mình đính kèm file danh sách chấm điểm.xls
trong sheet tính điểm mình đã có danh sách mã khách hàng (cột D-mã khách hàng là số-VD: 123456) đã được chấm điểm trong các ngày 30/06/07, 31/12/07 , 30/06/08, 30/09/08.
Trong các sheet còn lại có một số khách hàng chưa được tính điểm
tôi muốn lọc ra trong các sheet 30/06/07, 31/12/07 , 30/06/08, 30/09/08-các ngày đó có mã khách hàng nào chưa được tính điểm thì làm như thế nào(mã khách hàng nào đã có trong cột D của sheet "tính điểm" thì không lấy) .}}}}}
mong các huynh giúp đỡ!! (giá trị được lọc ra có thể nằm ở đâu cũng được,có thể là sheet mới)
Regards
Macarong
P/S : mình cần gấp lắm,ai có lời giải mình sẽ gặp nhau uống cà fê cho zui

Theo tôi, bác nên copy tất cả danh sách khách hàng vào một sheet, viêc lọc sẽ đơn giản hơn. Bác xem thử file Dosnet làm cho bác (Không biết có được cafe ko đây }}}}})

Macarong100
17-12-08, 11:30 PM
Cám ơn Dosnet, vẫn chưa được, ví dụ vẫn chưa lọc ra ngày 30/06/07 có khách hàng nào chưa chấm điểm.
mục đích là tìm trong các sheet ngày đó có ai chưa được có trong sheet "tinh diem" ,mỗi sheet sẽ có 1 danh sách tương ứng(danh sách các KH chưa có trong'tinh diem")

Macarong100
18-12-08, 12:02 AM
vậy không giá trị nào đã trùng thì không muốn xất hiện thì dùng như thế nào?
vi du A B C A D F E A C F ,muốn lọc ra chỉ có B D E thì làm sao?

ChanhTQ@
18-12-08, 07:41 AM
Mục đích là tìm trong các sheet ngày đó có ai chưa được có trong sheet "tinh diem" ,mỗi sheet sẽ có 1 danh sách tương ứng(danh sách các KH chưa có trong'tinh diem")

Chúng ta phải tìm theo mã khách hàng (MKH) từ các sheets tương ứng; nhưng MKH bên [Tinh Diem] chỉ là các số 6 chữ số; còn các sheets còn lại có MKH đến > 7 ký số; Tìm sao đây bạn?!

DOSNET
18-12-08, 08:35 AM
Cám ơn Dosnet, vẫn chưa được, ví dụ vẫn chưa lọc ra ngày 30/06/07 có khách hàng nào chưa chấm điểm.
mục đích là tìm trong các sheet ngày đó có ai chưa được có trong sheet "tinh diem" ,mỗi sheet sẽ có 1 danh sách tương ứng(danh sách các KH chưa có trong'tinh diem")
Thực ra Dosnet đã gộp 3 sheet vào một sheet LOC cho bác rồi, nếu thích làm riêng từng sheet thì đơn giản thôi.
- Ngoài việc phát hiện ra mã khách hàng (lúc thì 4,5,6 số) như bác ChanhTQ@ nói, Dosnet nhận thấy trong các sheet yêu cầu chấm điểm có rất nhiều mã trùng nhau, hầu hết là trùng từ 2 đến 3 lần trong một danh sách.
- Nếu đơn giản chỉ là việc phát hiện ra khách hàng nào chưa được tính điểm, ta nên dùng Conditinonal Formating để đánh dấu
- Bác giải thích việc không thống nhất và trùng quá nhiều mã khách hàng trong danh sách, Dosnet sẽ làm giúp bác, lọc cũng được mà đánh dấu cũng được. Thân !

SA_DQ
18-12-08, 11:53 AM
vậy không giá trị nào đã trùng thì không muốn xuất hiện thì dùng như thế nào?
vi du A B C A D F E A C F ,muốn lọc ra chỉ có B D E thì làm sao?


Option Explicit
Sub OnlyOne()
Dim eRw As Long, Ff As Long: Dim myAdd As String
Dim Rng As Range, sRng As Range
eRw = [A65500].End(xlUp).Row: ReDim DaCo(2 To eRw) As Boolean
For Ff = 2 To eRw
Set Rng = Range("A" & Ff + 1 & ":A" & eRw)
If Not DaCo(Ff) Then
Set sRng = Rng.Find(what:=Cells(Ff, "A"), LookIn:=xlFormulas, lookat:=xlWhole)
If Not sRng Is Nothing Then
myAdd = sRng.Address
If DaCo(sRng.Row) = False Then
Do
DaCo(sRng.Row) = True
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> myAdd
End If
Else
[c65500].End(xlUp).Offset(1) = Cells(Ff, "A").Value
End If: End If
Next Ff
End Sub

anhtuan1066
18-12-08, 12:33 PM
Option Explicit
Sub OnlyOne()
Dim eRw As Long, Ff As Long: Dim myAdd As String
Dim Rng As Range, sRng As Range
eRw = [A65500].End(xlUp).Row: ReDim DaCo(2 To eRw) As Boolean
For Ff = 2 To eRw
Set Rng = Range("A" & Ff + 1 & ":A" & eRw)
If Not DaCo(Ff) Then
Set sRng = Rng.Find(what:=Cells(Ff, "A"), LookIn:=xlFormulas, lookat:=xlWhole)
If Not sRng Is Nothing Then
myAdd = sRng.Address
If DaCo(sRng.Row) = False Then
Do
DaCo(sRng.Row) = True
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> myAdd
End If
Else
[c65500].End(xlUp).Offset(1) = Cells(Ff, "A").Value
End If: End If
Next Ff
End Sub
Còn em thì khoái dùng COUNTIF trong trường hợp này hơn:


Sub OnlyOne()
Dim Clls As Range
With Range([A2], [A65536].End(xlUp))
For Each Clls In .SpecialCells(2, 23)
If WorksheetFunction.CountIf(.Cells, Clls) = 1 Then
[C65536].End(xlUp).Offset(1) = Clls
End If
Next
End With
End Sub

levanduyet
18-12-08, 01:02 PM
1. Sử dụng Collection:



Sub FilterUniqueNumbers()
Dim rngYourrange As Range
Dim rngCell As Range
Dim colUniqueNumbers As New Collection
Dim i As Integer

' Set the range that you want to filter for unique numbers
Set rngYourrange = Worksheets(1).Range("A1:A10")

' Store the unique range values in the collection object. Note we use the
' range value converted to a string as the key value.
On Error Resume Next
For Each rngCell In rngYourrange
colUniqueNumbers.Add rngCell.Value, CStr(rngCell.Value)
Next rngCell

' Write each item from the collection object to column B in worksheet 1.
For i = 1 To colUniqueNumbers.Count
Worksheets(1).Cells(i, 2).Value = colUniqueNumbers(i)
Next i
End Sub


2. Dùng AdvancedFilter:



Sub FilterUniqueNumbers2()
Dim rngDuplicates As Range
Dim rngDestination As Range
Dim rngCriteria As Range

' Filter entire column A, or use Range("A1:A10") or something to check only 10 rows.
Set rngDuplicates = ThisWorkbook.Worksheets(1).Range("A:A")


Set rngDestination = ThisWorkbook.Worksheets(1).Range("B1")
Set rngCriteria = ThisWorkbook.Worksheets(1).Range("C1:C5")

rngDuplicates.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, _
CopyToRange:=rngDestination, Unique:=True
End Sub


3. Dùng scripting.dictionary:



Sub FilterUniqueNumbers3()
Dim vValue As Variant, vVals As Variant
Dim myRange As Range
Dim i As Long
Dim dArr() As Double
Dim oDic As Object

Set myRange = Worksheets(1).Range("A1:A10")

'The Dictionary object is always present in Windows so it can always be created
Set oDic = CreateObject("scripting.dictionary")
oDic.comparemode = vbTextCompare

'Read the values from a range into vVals
vVals = myRange.Value

'ReDim dArr and make it two dimensional by adding the second argument 1 To 1
'otherwise you can't dump it in a worksheet later.
ReDim dArr(UBound(vVals) - 1, 1 To 1)

For Each vValue In vVals
'Note the use of the Dictionary object to exclude double values
If Not IsEmpty(vValue) And Not oDic.exists(vValue) Then
dArr(i, 1) = vValue
oDic.Add vValue, Nothing
i = i + 1
End If
Next vValue

'Free memory by removing the Dictionary object and vVals from memory
Set oDic = Nothing
Erase vVals

'Remove old data
myRange.Clear

'Dump dArr values in worksheet
myRange.Resize(i).Value = dArr
End Sub



4. Viết Class module:



Sub ExtractItems()

Dim clsExtract As CUniqueItems
Dim rngSel As Range, rngTar As Range

Set clsExtract = New CUniqueItems
Set rngSel = Selection
Set rngTar = ThisWorkbook.Sheets("Sheet2").Range("A1")

clsExtract.TheSelection = rngSel
clsExtract.Target = rngTar
clsExtract.ExtractUniques

End Sub

Option Explicit

' Class constants
Private Const msTAB As String = vbTab

' Class variables
Private mrSelection As Range
Private mrTarget As Range

' Class Properties
' Selection
Property Get TheSelection() As Range
Set TheSelection = mrSelection
End Property
Property Let TheSelection(rng As Range)
Set mrSelection = rng
End Property

' Target
Property Get Target() As Range
Set targert = mrTarget
End Property
Property Let Target(rng As Range)
' The target can only be one cell, so if more than
' one cell is chosen, set the range to the
' upper leftmost cell.
If rng.Count&gt; 1 Then
Set mrTarget = rng.Cells(1, 1)
Else
Set mrTarget = rng
End If
End Property

' Class methods

Sub ExtractUniques()

' Variable declarations
Dim rngCell As Range
Dim col As Collection
Dim iColCnt As Integer, i As Integer
Dim vValue As Variant

' Create a new collection.
Set col = New Collection

' Get the number of columns in the range
iColCnt = mrSelection.Columns.Count
' If the column count is greater than 1, resize it to 1 column.
If iColCnt&gt; 1 Then Set mrSelection = mrSelection.Resize(, 1)

' Turn off updating.
Application.ScreenUpdating = False

' Add each unique item to the collection.
For Each rngCell In mrSelection.Cells
vValue = ""
' If the column count is great than one, add the whole
' row of data in teh selected range. We'll split it out
' later.
If iColCnt&gt; 1 Then
For i = 0 To iColCnt - 1
' Add all the data from the selected rows to the variable,
' separating them by a tab.
vValue = vValue &amp; rngCell.Offset(0, i).Value &amp; msTAB
Next i
Else
vValue = rngCell.Value
End If
' Temporarily turn off error handling.
On Error Resume Next
' Add to the collection.
col.Add CStr(vValue), CStr(vValue)
' Turn error handling back on.
On Error GoTo 0
Next rngCell

' Write the data back out to the target.
i = 1
For i = 1 To col.Count
mrTarget.Offset(i - 1, 0).Value = col(i)
Next i

' If the selection column count is greater than 1,
' then convert the output text to multiple columns
' using text to columns.
If iColCnt&gt; 1 Then
mrTarget.Parent.Activate
mrTarget.Select
Range(Selection, Selection.Offset(col.Count - 1, 0)).Select
Selection.TextToColumns Destination:=Range(Selection.Address), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False
End If

' Turn on updating and kill the collection object.
Application.ScreenUpdating = True
Set col = Nothing

End Sub


5. Sử dụng Array:



Sub enkel()
Dim sq As Variant
Dim j As Long

If Selection.Columns.Count = 1 Then
sq = Application.WorksheetFunction.Transpose(Selection. SpecialCells(xlCellTypeConstants))
For j = 1 To UBound(sq)
sq=split(replace("|" &amp; join(sq,"|") &amp; "|","|" &amp; sq(j) &amp; "|","") &amp; "|" &amp; sq(j),"|")
Next
Sheets(1).[K1].Resize(UBound(sq) + 1) = Application.WorksheetFunction.Transpose(sq)
End If
End Sub


Lê Văn Duyệt

anhtuan1066
18-12-08, 01:15 PM
Ko biết đã có ai làm cuộc thí nghiệm xem thử trong tất cả các phương pháp lọc duy nhất thì phương pháp nào là nhanh nhất ko?
(cho đến hiện nay tôi chỉ biết Advanced Filter xem chừng là .. cực mạnh, ko biết còn món nào khác hơn nó ko nhỉ?)

SA_DQ
18-12-08, 02:05 PM
Còn em thì khoái dùng COUNTIF trong trường hợp này hơn:


Sub OnlyOne()
Dim Clls As Range
With Range([A2], [A65536].End(xlUp))
For Each Clls In .SpecialCells(2, 23)
If WorksheetFunction.CountIf(.Cells, Clls) = 1 Then
[C65536].End(xlUp).Offset(1) = Clls
End If
Next
End With
End Sub
Bình thường thì code của bạn nhanh gấp đôi của mình! Một khi rất ít ký tự trong cột trùng nhau
Nhưng trong trường hợp rất nhiều các ký tự lặp lại nhiều lần, thì code của mình với FINDNEXT & biến loại trừ tỏ ra nước rút gấp 7 lần của bạn kia đó!

volga
19-12-08, 08:48 PM
Em có vấn đề này từ lâu muốn hỏi +-+-+-+.
Có cách nào đưa một danh sách duy nhất vào validation không các anh ?
Không dùng cột phụ & ko VBA .
em có kẻm File ví dụ ,nhưng đang dùng cột phụ .
File này em tìm trong loạt bài viết của anh Ndu;;;;;;;;;;; hi hi
Em cám ơn.

ndu96081631
19-12-08, 09:02 PM
Em có vấn đề này từ lâu muốn hỏi +-+-+-+.
Có cách nào đưa một danh sách duy nhất vào validation không các anh ?
Không dùng cột phụ & ko VBA .
em có kẻm File ví dụ ,nhưng đang dùng cột phụ .
File này em tìm trong loạt bài viết của anh Ndu;;;;;;;;;;; hi hi
Em cám ơn.
Có thể trả lời bạn ngay là KHÔNG CÓ CÁCH
Vì Validation chỉ chấp nhận List là 1 VÙNG CÓ THẬT trên bảng tính ---> Không chấp nhận Range do công thức "chế tác" ra
---> Tuy nhiên cái file của bạn có thể chỉnh lại còn 1 cột phụ thì được

daugau
19-12-08, 09:02 PM
Theo ý của bạn ko dùng cột phụ là sao?(có phải cột chứa dữ liệu, từ cột đó bạn đặt tên cho nó, sau đó cột đó được dùng để lấy nội dung của nó hiện trong list các giá trị mà bạn lấy trong cell mà bạn muốn validation hả?)
Nếu như vậy thì rất khó. vì phải có một nguồn nào đó bạn mới lấy được list chứ, nếu ko dùng list chỉ dùng để nhập các điều kiện logic (vd< 5 chẳng hạn)

boyxin
19-12-08, 09:07 PM
Em có vấn đề này từ lâu muốn hỏi +-+-+-+.
Có cách nào đưa một danh sách duy nhất vào validation không các anh ?
Không dùng cột phụ & ko VBA .
em có kẻm File ví dụ ,nhưng đang dùng cột phụ .
File này em tìm trong loạt bài viết của anh Ndu;;;;;;;;;;; hi hi
Em cám ơn.


Xem có vừa ý không? (1 cột phụ)

volga
20-12-08, 09:42 AM
Theo ý của bạn ko dùng cột phụ là sao?(có phải cột chứa dữ liệu, từ cột đó bạn đặt tên cho nó, sau đó cột đó được dùng để lấy nội dung của nó hiện trong list các giá trị mà bạn lấy trong cell mà bạn muốn validation hả?)
Nếu như vậy thì rất khó. vì phải có một nguồn nào đó bạn mới lấy được list chứ, nếu ko dùng list chỉ dùng để nhập các điều kiện logic (vd< 5 chẳng hạn)

Dùng cột phụ thì mình nghỉ ra ,củng sử dụng cách trích lọc duy nhất rồi đưa vào list .
Mình nghỉ tại mình làm ko được thôi ,chứ với các Pro thì sẽ làm được hi hi
Cám ơn bạn nhe .

future_gtvt
21-12-08, 12:53 AM
Mình làm thế này không cần dùng cột phụ, tuy nhiên phai nhập thủ công. Với danh sách dài như của bạn cũng khá vất vả đấy. Chỉ đơn giản là trong mục source nhập dự liệu đầu vào các dữ liệu ngăn cách nhau bởi dấu ,

ndu96081631
21-12-08, 06:46 AM
Mình làm thế này không cần dùng cột phụ, tuy nhiên phai nhập thủ công. Với danh sách dài như của bạn cũng khá vất vả đấy. Chỉ đơn giản là trong mục source nhập dự liệu đầu vào các dữ liệu ngăn cách nhau bởi dấu ,
Cách này không được, vì nếu nhập trực tiếp, Excel chỉ cho phép nhập với số lượng ký tự có hạn mà thôi

volga
21-12-08, 10:27 AM
Mình làm thế này không cần dùng cột phụ, tuy nhiên phai nhập thủ công. Với danh sách dài như của bạn cũng khá vất vả đấy. Chỉ đơn giản là trong mục source nhập dự liệu đầu vào các dữ liệu ngăn cách nhau bởi dấu ,

Cái này thì nói chi ,nếu dử liệu nhiều quá thì củng bó tay .Mình hỏi coi có cách nào tối ưu hơn ko thôi ,Cái này dùng cột phụ như các anh ndu,anh boyxin là ok rồi .

ndu96081631
21-12-08, 10:44 AM
Cái này thì nói chi ,nếu dử liệu nhiều quá thì củng bó tay .Mình hỏi coi có cách nào tối ưu hơn ko thôi ,Cái này dùng cột phụ như các anh ndu,anh boyxin là ok rồi .
Khẳng định với bạn rằng: Cho đến thời điểm hiện nay, với Office hiện nay là KHÔNG CÓ CÁCH NÀO KHÁC... kể cả VBA (nếu không dùng cột phụ)
Vì bản chất của Validation nó vậy, chỉ "công nhận" 1 List có thật
Hy vọng các Version sau này, 2010 hoặc trên nữa sẽ đáp ứng yêu cầu của bạn
Ẹc... Ẹc...
(cái này đã từng thử và đã từng hỏi trên diển đàn lâu lắm rồi)

dieulanhy
17-03-09, 09:08 AM
Chào các anh/chị.
Trong bảng tính có các dữ liệu trùng nhau (tên, màu sắc...) mình muốn loại bỏ những tên trùng nhau (chỉ giữ lại 1 tên) thì phải sdụng công thức nào ?
Xem file đính kèm.
Thanks

tedaynui
17-03-09, 09:14 AM
Chào các anh/chị.
Trong bảng tính có các dữ liệu trùng nhau (tên, màu sắc...) mình muốn loại bỏ những tên trùng nhau (chỉ giữ lại 1 tên) thì phải sdụng công thức nào ?
Xem file đính kèm.
ThanksBạn dùng chức năng Advanced Filter và nhớ tích chọn Unique records only.

TDN

dieulanhy
18-03-09, 09:20 AM
Bạn dùng chức năng Advanced Filter và nhớ tích chọn Unique records only.

TDN


Cám ơn tedaynui đã trả lời. Nhưng mình làm theo cách của bạn ko ra đ.c kquả như mong muốn.
Bạn có thể cho mình giải pháp khác ko ?

ndu96081631
18-03-09, 09:49 AM
Cám ơn tedaynui đã trả lời. Nhưng mình làm theo cách của bạn ko ra đ.c kquả như mong muốn.
Bạn có thể cho mình giải pháp khác ko ?
Với file của bạn, ta sẽ làm như sau:
1> Copy C2:C9 rồi paste vào B10 ---> Vậy cột B sẽ có dử liệu từ B1 đến B16
2> Quét chọn B1:B16, vào menu Date\Filter\Advanced Filter

a) Check vào muc "Copy to another location"
b) Khung Copy to, chọn 1 cell trống nào đó mà bạn cần đặt dử liệu sau khi lọc
c) Check vào "Unique records only"
3> Bấm nút OK và xem kết quả

dieulanhy
18-03-09, 10:18 AM
Với file của bạn, ta sẽ làm như sau:
1> Copy C2:C9 rồi paste vào B10 ---> Vậy cột B sẽ có dử liệu từ B1 đến B16
2> Quét chọn B1:B16, vào menu Date\Filter\Advanced Filter
a) Check vào muc "Copy to another location"
b) Khung Copy to, chọn 1 cell trống nào đó mà bạn cần đặt dử liệu sau khi lọc
c) Check vào "Unique records only"
3> Bấm nút OK và xem kết quả

Thanks nd96181631 nhiều. Bạn hiểu ý của mình. Nhưng mình làm nó ra kết quả các mầu đều đúng cả.
Riêng màu xanh nó ra 2 dòng (nếu màu xanh đứng đầu hàng. Tương tự với các màu khác nếu màu đó đứng đầu hàng).
Bạn xem lại cho mình nhé.

ndu96081631
18-03-09, 10:22 AM
Thanks nd96181631 nhiều. Bạn hiểu ý của mình. Nhưng mình làm nó ra kết quả các mầu đều đúng cả.
Riêng màu xanh nó ra 2 dòng.
Bạn xem lại cho mình nhé.
Tôi biết bạn sai chổ nào rồi: Do vùng chọn của bạn không có tiêu đề, nên Advanced Filter sẽ xem cell đầu tiên chính là tiêu đề (chính là cell có chử Xanh)
Giờ bạn thử làm lại y chang như tôi nói, nhưng khi lọc nhớ chọn luôn tiêu đề (nếu chưa có tiêu đề thì thêm vào)

cop_kh
18-03-09, 10:24 AM
Thanks nd96181631 nhiều. Bạn hiểu ý của mình. Nhưng mình làm nó ra kết quả các mầu đều đúng cả.
Riêng màu xanh nó ra 2 dòng.
Bạn xem lại cho mình nhé.

Bạn nhớ là phải chọn từ B1:B16 (với B1 là ô tiêu đề), vì nếu không thì Excel sẽ hiểu ô đầu tiên là (B2:xanh) ô tiêu đề, vấn đề là vậy chứ không phải bị sai đâu bạn.

dieulanhy
18-03-09, 10:25 AM
Tôi biết bạn sai chổ nào rồi: Do vùng chọn của bạn không có tiêu đề, nên Advanced Filter sẽ xem cell đầu tiên chính là tiêu đề (chính là cell có chử Xanh)
Giờ bạn thử làm lại y chang như tôi nói, nhưng khi lọc nhớ chọn luôn tiêu đề (nếu chưa có tiêu đề thì thêm vào)

Thanks so much. Mình đã làm đc rồi. Chúc bạn một ngày vui vẻ. làm việc hiệu quả.

Hi ndu96081631.
Mình có thêm 1 ý nữa là nếu cột màu 1 or cột màu 2 bỏ đi 1 hoặc nhiều màu thì cột số lượng màu cũng tự thay đổi theo.
Khi đó mình sẽ phải làm sao ?. Hiện tại thì nó chưa làm đ.c.

Hai Lúa Miền Tây
18-03-09, 10:42 AM
Cái này bạn phải record rồi sau đó nếu muốn update dữ liệu bạn chạy macro đó nó mới update mặt hàng mới được chứ đã copy dán rồi thì sao cập nhật được ngoại trừ dùng công thức.
Thân

ndu96081631
18-03-09, 10:46 AM
Hi ndu96081631.
Mình có thêm 1 ý nữa là nếu cột màu 1 or cột màu 2 bỏ đi 1 hoặc nhiều màu thì cột số lượng màu cũng tự thay đổi theo.
Khi đó mình sẽ phải làm sao ?. Hiện tại thì nó chưa làm đ.c.

Đương nhiên mỗi khi dử liệu thay đổi bạn phải thao tác lọc lại từ đầu
Muốn tự động thì dùng VBA hoặc công thức đều được ---> Nếu bạn đồng ý thì tốt nhất nên đưa dử liệu thật lên đây (sẽ đở mất công chỉnh sửa)

dieulanhy
18-03-09, 10:47 AM
Cái này bạn phải record rồi sau đó nếu muốn update dữ liệu bạn chạy macro đó nó mới update mặt hàng mới được chứ đã copy dán rồi thì sao cập nhật được ngoại trừ dùng công thức.
Thân
Uh, thanks domfootwear. Nhưng những cái đó mình ko biết làm.Cho mình giải pháp nhé.


Đương nhiên mỗi khi dử liệu thay đổi bạn phải thao tác lọc lại từ đầu
Muốn tự động thì dùng VBA hoặc công thức đều được ---> Nếu bạn đồng ý thì tốt nhất nên đưa dử liệu thật lên đây (sẽ đở mất công chỉnh sửa)
Dữ liệu chỉ là như vậy thôi. Mình có nhiệm vụ liệt kê các loại màu. Sau đó tính tổng (số kg) các màu hiện có.
Liệt kê số lượng màu là mình đã giải quyết đ.c bài toán đó rồi.
Nếu dùng công thức thì sẽ update đc nhưng cthức sẽ sdụng như thế nào. Bạn giúp mình nhé !

ndu96081631
18-03-09, 11:13 AM
Dữ liệu chỉ là như vậy thôi. Mình có nhiệm vụ liệt kê các loại màu. Sau đó tính tổng (số kg) các màu hiện có.
Liệt kê số lượng màu là mình đã giải quyết đ.c bài toán đó rồi.
Nếu dùng công thức thì sẽ update đc nhưng cthức sẽ sdụng như thế nào. Bạn giúp mình nhé !
xem thử file này ---> Mở file nhớ Enable macro nhé
Muốn công thức thì tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=12035

dieulanhy
18-03-09, 11:13 AM
xem thử file này ---> Mở file nhớ Enable macro nhé
Muốn công thức thì tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=12035
Uh, cái này thì ok rồi. Nhưng chèn macro ra sao bạn chỉ cho mình nhé. +-+-+-+

Mình up lên 1 file với số lượng màu ít. Các bạn xem & hướng dẫn nhé.
Thanks

dieulanhy
18-03-09, 11:29 AM
ndu96081631 Cho mình cái công thức trích lọc trên 1 sheet đ.c rồi. Mình vô đọc như đám rừng ấy. Công lực chưa hiểu hết đ.c (hix hix)

ndu96081631
18-03-09, 11:33 AM
ndu96081631 Cho mình cái công thức trích lọc trên 1 sheet đ.c rồi. Mình vô đọc như đám rừng ấy. Công lực chưa hiểu hết đ.c (hix hix)
Tải file về... xem công thức trong Define name (vào menu Insert\Name\Define ) ---> Người ta định nghĩa DS_1 và DS_2 là vùng thuộc 2 sheet khác nhau ---> Bạn sửa lại tên sheet cho phù hợp với file của bạn là được rồi

dieulanhy
19-03-09, 09:39 AM
Tải file về... xem công thức trong Define name (vào menu Insert\Name\Define ) ---> Người ta định nghĩa DS_1 và DS_2 là vùng thuộc 2 sheet khác nhau ---> Bạn sửa lại tên sheet cho phù hợp với file của bạn là được rồi

DK_1: IF(MATCH(DS_1,DS_1,0)=ROW(INDIRECT("1:"&ROWS(DS_1))),ROW(INDIRECT("1:"&ROWS(DS_1))),"")

DK_2: (MATCH(DS_2,DS_2,0)=ROW(INDIRECT("1:"&ROWS(DS_2))))*(COUNTIF(DS_1,DS_2)<1)*(ROW(INDIRECT("1:"&ROWS(DS_2))))

DK_3: IF(DK_2=0,"",DK_2)

DS_1: OFFSET(Sheet1!$A$4,,,COUNTA(Sheet1!$A$4:$A$1003),)

DS_2: OFFSET(Sheet2!$A$1,,,COUNTA(Sheet2!$A$1:$A$1000),)

Công thức: IF(ROWS($1:1)>COUNT(DK_1)+COUNT(DK_3),"",IF(ROWS($1:1)>COUNT(DK_1),INDEX(DS_2,SMALL(DK_3,ROWS($1:1)-COUNT(DK_1)),),INDEX(DS_1,SMALL(DK_1,ROWS($1:1)),) ))

Hix, Nghiên cứu từ hôm qua tới giờ mà cũng chưa vỡ ngu đ.c hết. Còn lờ mờ về cái giải thuật & mấy ct này !!
ndu96081631 & các bạn giải thích rõ thêm cho mình hiểu nhé.

ndu96081631
19-03-09, 10:01 AM
DK_1: IF(MATCH(DS_1,DS_1,0)=ROW(INDIRECT("1:"&ROWS(DS_1))),ROW(INDIRECT("1:"&ROWS(DS_1))),"")

DK_2: (MATCH(DS_2,DS_2,0)=ROW(INDIRECT("1:"&ROWS(DS_2))))*(COUNTIF(DS_1,DS_2)<1)*(ROW(INDIRECT("1:"&ROWS(DS_2))))

DK_3: IF(DK_2=0,"",DK_2)

DS_1: OFFSET(Sheet1!$A$4,,,COUNTA(Sheet1!$A$4:$A$1003),)

DS_2: OFFSET(Sheet2!$A$1,,,COUNTA(Sheet2!$A$1:$A$1000),)

Công thức: IF(ROWS($1:1)>COUNT(DK_1)+COUNT(DK_3),"",IF(ROWS($1:1)>COUNT(DK_1),INDEX(DS_2,SMALL(DK_3,ROWS($1:1)-COUNT(DK_1)),),INDEX(DS_1,SMALL(DK_1,ROWS($1:1)),) ))

Hix, Nghiên cứu từ hôm qua tới giờ mà cũng chưa vỡ ngu đ.c hết. Còn lờ mờ về cái giải thuật & mấy ct này !!
ndu96081631 & các bạn giải thích rõ thêm cho mình hiểu nhé.
Quan trọng là 2 name DS_1 và DS_2 ---> Bạn phải sửa lại cho phù hợp với dử liệu thật của bạn:
DS_1 ở đây định nghĩa là vùng chứa dử liệu trong Sheet1, cột A, tính từ A4 đến dòng cuối cùng
DS_2 ở đây định nghĩa là vùng chứa dử liệu trong Sheet2, cột A, tính từ A1 đến dòng cuối cùng
Vậy bạn chỉ cần chỉnh lại 2 name này, các name khác và công thức cứ giử nguyên

Mainho
20-03-09, 01:09 PM
mình có bài tập theo file đính kèm, bình thường mình vẫn làm thủ công nhưng hiện tại số khách hàng lên quá nhiều nên gặp rất nhiều khó khăn. Các anh/chị trên DĐ giúp mình bằng công thức nhé.
Ở cột I, mình cần hiện mã của loại sản phẩm theo từng khách hàng (chỉ lấy 1 lần)
Cám ơn nhiều

volga
20-03-09, 01:12 PM
mình có bài tập theo file đính kèm, bình thường mình vẫn làm thủ công nhưng hiện tại số khách hàng lên quá nhiều nên gặp rất nhiều khó khăn. Các anh/chị trên DĐ giúp mình bằng công thức nhé.
Ở cột I, mình cần hiện mã của loại sản phẩm theo từng khách hàng (chỉ lấy 1 lần)
Cám ơn nhiều

Bạn dùng Advanced Filer đi ,lọc ra kết quả duy nhất
Vào xem cái này (http://www.giaiphapexcel.com/forum/showpost.php?p=23&postcount=2) và tìm hiểu nhe
Thân
Cái này (http://www.giaiphapexcel.com/forum/showpost.php?p=119135&postcount=2) nữa nhe !

ndu96081631
20-03-09, 01:59 PM
mình có bài tập theo file đính kèm, bình thường mình vẫn làm thủ công nhưng hiện tại số khách hàng lên quá nhiều nên gặp rất nhiều khó khăn. Các anh/chị trên DĐ giúp mình bằng công thức nhé.
Ở cột I, mình cần hiện mã của loại sản phẩm theo từng khách hàng (chỉ lấy 1 lần)
Cám ơn nhiều
Yêu cầu này dùng Advanced Filter cũng tốt, nhưng sẽ không nhanh bằng Consolidate
Bạn xem file hướng dẩn của tôi và làm theo ---> 10s là xong!

Mainho
20-03-09, 04:49 PM
Cám ơn các anh/ chị, nhưng cũng xin hỏi thêm trong trường hợp có 2 cột điểm, thì có thể dùng cách này không? Thực sự mình muốn hỏi công thức vi hàng tuần, các số liệu của mình đều thay đổi, nếu chỉ cần update so liệu thôi thi bảng điểm trung binh tự động chạy theo.
Các anh/chị xem thêm trong file để hiểu rõ ý mình hơn nhé.

ndu96081631
21-03-09, 08:12 AM
Cám ơn các anh/ chị, nhưng cũng xin hỏi thêm trong trường hợp có 2 cột điểm, thì có thể dùng cách này không? Thực sự mình muốn hỏi công thức vi hàng tuần, các số liệu của mình đều thay đổi, nếu chỉ cần update so liệu thôi thi bảng điểm trung binh tự động chạy theo.
Các anh/chị xem thêm trong file để hiểu rõ ý mình hơn nhé.
2 cột điểm thì cũng vẫn dùng Consolidate thôi ---> Add vào 2 vùng C2:D25 và C2:E5
Để bạn đở mất công làm bằng tay, tôi viết nó thành code... bạn chỉ việc nhấn nút là xong!


Sub DiemTB()
Range("I1").CurrentRegion.Offset(1).ClearContents
With Range([C2], [C65536].End(xlUp))
Range("I2").Consolidate _
Array(.Resize(, 2).Address(, , 2), .Resize(, 3).Address(, , 2)), 1, False, True
End With
End Sub

DOSNET
21-03-09, 09:01 AM
Mình làm bằng công thức và lọc tự động khi dữ liệu nguồn thay đổi. Tuy nhiên vẫn hướng bạn tham khảo, nên sử dụng Consolidate của bác ndu. Thân!

ndu96081631
21-03-09, 09:21 AM
Mình làm bằng công thức và lọc tự động khi dữ liệu nguồn thay đổi. Tuy nhiên vẫn hướng bạn tham khảo, nên sử dụng Consolidate của bác ndu. Thân!
Công thức tính trung bình không có vấn đề, nhưng còn phần lọc duy nhất rất khó "nhai" ---> Công thức này khá "nặng" ---> Là nguyên nhân khiến cho file chạy chậm với file có dử liệu lớn
Chính vì lẻ đó mà tôi.. "né" công thức

huonglypolice
26-03-09, 02:22 PM
Mình muốn hỏi chút về phần này, cũng là phần lọc dữ liệu trùng, vẫn đề bài như trên nhưng mình lọc tự động nếu thêm dòng dữ liệu ở cột B1 thì cột E sẽ tự thêm dữ liệu. Tức là sẽ ko phải lặp lại thao tác như trên mới hiện ra những dòng mới! Dùng hàm là tốt nhất.

nguyenduclinh
28-03-09, 11:00 AM
Cho mình hỏi cách copy Validation từ cell này qua các cells khác trong bảng tính thì làm bằng cách nào? Mình dùng đủ cách như Copy, Paste Special hay chọn mục Apply these changes to all other with the same settings đều không được.
Thanks very much!

ndu96081631
28-03-09, 11:15 AM
Cho mình hỏi cách copy Validation từ cell này qua các cells khác trong bảng tính thì làm bằng cách nào? Mình dùng đủ cách như Copy, Paste Special hay chọn mục Apply these changes to all other with the same settings đều không được.
Thanks very much!
Chức năng PasteSpecial có cho phép Paste Validation ---> Nếu bạn làm không ra kết quả thì có lẽ sai sót nằm ở địa chỉ tham chiếu trong công thức (tương đối hay tuyệt đối)
Muốn biết nguyên nhân không gì bằng đưa file lên bạn nhé!

tedaynui
28-03-09, 11:18 AM
Cho mình hỏi cách copy Validation từ cell này qua các cells khác trong bảng tính thì làm bằng cách nào? Mình dùng đủ cách như Copy, Paste Special hay chọn mục Apply these changes to all other with the same settings đều không được.
Thanks very much!
Sao lạ vậy ?? Mình đã test thử chỉ cần Ctr+C và Ctrl+V là được mà. Bạn thử lại xem

TDN

nguyenduclinh
28-03-09, 02:50 PM
Chức năng PasteSpecial có cho phép Paste Validation ---> Nếu bạn làm không ra kết quả thì có lẽ sai sót nằm ở địa chỉ tham chiếu trong công thức (tương đối hay tuyệt đối)
Muốn biết nguyên nhân không gì bằng đưa file lên bạn nhé!
Copy được nhưng ý của mình là các biến trong các formular không thay đổi theo cell, ví dụ như formular countif($A$1:A1,A2)=0 của cell A2 khi copy sang cell A3 vẫn giữ nguyên chứ không đổi thành countif($A$1:A2,A3)=0. Như thế là phải sửa từng cell. Mà bảng của mình thì phải trên 2000 cell trên 1 column cần sửa cơ.

ndu96081631
28-03-09, 03:02 PM
Copy được nhưng ý của mình là các biến trong các formular không thay đổi theo cell, ví dụ như formular countif($A$1:A1,A2)=0 của cell A2 khi copy sang cell A3 vẫn giữ nguyên chứ không đổi thành countif($A$1:A2,A3)=0. Như thế là phải sửa từng cell. Mà bảng của mình thì phải trên 2000 cell trên 1 column cần sửa cơ.
Làm gì có chứ... tôi đã thí nghiệm và không thấy hiện tượng như bạn nói
Còn không tốt nhất bạn cứ đưa file lên ---> Đở mất công đoán

hongson62
01-04-09, 07:33 PM
ban dùng ham Pivot Table and Pivot Chart Repoc trong menu Data

ngocthanhhn2002
02-04-09, 05:42 PM
hic hic giúp em với em có một vấn đề này mà không biết phải làm thế
đây là dữ liệu xăng tháng của bên em nhưng bây giờ em muốn
nhặt từng bộ phận và tổng số lượng của bộ phận đó trong từng ngày nhưng em không biết phải sử dụng cách nào để có thể làm được điều này vì em nhặt bằng hàm sumif thì nó không nhặt được bộ phận và tổng từng ngày à

nkdung77
16-04-09, 12:56 PM
Mình có danh sách khách hàng kí hợp đồng với công ty 1 hay nhiều lần.Mình muốn tập hợp lại danh sách khách hàng kí 1 lần riêng và danh sách khách hàng kí hợp đồng nhiều lần với chi tiết kèm theo(ngày ký hợp đồng, số hợp đồng)
Các bạn chỉ giúp mình với.Cám ơn lắm lắm !!!

nkdung77
16-04-09, 01:13 PM
sao ko thêm file được vậy

nkdung77
16-04-09, 01:27 PM
Hôm nay đơ rồi,ko thêm đc file nữa.

Mình mô tả vậy

Cột 1 : Số hợp đồng lần lượt 55 . 14 . 35 .57. 78 . 96 . 47
Cột 2 : Ngày kí 1/1/2000 4/2/1999 5/3/2001 4/2/2002 3/5/2003 5/7/2005 9/9/2004
Cột 3 : Tên công ty: A . A .B .C .B. D. E

Mọi ng thông cảm!!!

HảiĐăng
16-04-09, 01:41 PM
Hôm nay đơ rồi,ko thêm đc file nữa.

Mình mô tả vậy

Cột 1 : Số hợp đồng lần lượt 55 . 14 . 35 .57. 78 . 96 . 47
Cột 2 : Ngày kí 1/1/2000 4/2/1999 5/3/2001 4/2/2002 3/5/2003 5/7/2005 9/9/2004
Cột 3 : Tên công ty: A . A .B .C .B. D. E

Mọi ng thông cảm!!!

Mình đã thêm 1 cột phụ để đếm, sau đó lọc theo cột phụ.
Hy vọng đúng ý bạn muốn.

mailatoi2007
16-04-09, 01:44 PM
anh cho em mail đi em gửi lại cho

huuthang_bd
16-04-09, 01:47 PM
anh cho em mail đi em gửi lại cho
Gửi vào huuthang@tva.com.vn mình xem giúp cho

nkdung77
16-04-09, 02:00 PM
cảm ơn bạn!!!sao một hồi căng đầu loạn óc.sếp kêu viết tay.Mất công quá! :(

nkdung77
16-04-09, 02:02 PM
dữ liệu của mình phức tạp lắm.Sếp cũng ko làm j được nên....

huuthang_bd
16-04-09, 02:17 PM
dữ liệu của mình phức tạp lắm.Sếp cũng ko làm j được nên....
Sếp bạn không làm được chưa chắc GPE không làm được.
Không có gì là không thể!

nkdung77
16-04-09, 03:59 PM
uhm,tại vì CSDL khách hàng của mình cũng rắc rối, vừa trùng lặp,vừa thiếu,lại còn nhiều nữa nên...m add nick yahoo của bạn rùi thỉnh thoảng nhờ bạn chỉ cho m được ko?

nkdung77
17-04-09, 08:29 AM
Mình muốn lọc những dữ liệu chỉ trùng giữa 2 cột 1 và 2.Ko tính những dữ liệu trùng nhau trong 1 cột.Mình đã thử lọc bỏ những dữ liệu trùng nhau trong cột 1 và 2,rồi lọc những dữ liệu trùng giữa 2 cột mà sao ko đc. :(
CÁc bạn chỉ giúp mình với!!!
Mình kém excel lắm.CÁc bạn chỉ giúp mình từng bc với.
Cám ơn lắm lắm!!!

huuthang_bd
17-04-09, 08:36 AM
Mình muốn lọc những dữ liệu chỉ trùng giữa 2 cột 1 và 2.Ko tính những dữ liệu trùng nhau trong 1 cột.Mình đã thử lọc bỏ những dữ liệu trùng nhau trong cột 1 và 2,rồi lọc những dữ liệu trùng giữa 2 cột mà sao ko đc. :(
CÁc bạn chỉ giúp mình với!!!
Mình kém excel lắm.CÁc bạn chỉ giúp mình từng bc với.
Cám ơn lắm lắm!!!
Xem file đính kèm nha.

nkdung77
17-04-09, 09:08 AM
Hờ hờ,chả hiểu sao mình đánh code y hệt bạn mà nó lại ko ra

huuthang_bd
17-04-09, 09:11 AM
Hờ hờ,chả hiểu sao mình đánh code y hệt bạn mà nó lại ko ra
Vậy thì bạn xem lại đi chứ sao nữa. Rõ ràng trên file bạn upload tôi làm được đây thôi. Nếu không được thì nén file gốc lại upload lên tôi làm cho.

nkdung77
17-04-09, 09:20 AM
ÔI TRỜI ƠI!!! SR,T THỬ LẠI BẢN CŨ CÓ ĐOẠN T ĐÁNH NHẦM 2 DẤU CÁCH .NÊN NÓ CHỈ RA 1 KQUẢ.NGẠI GHÊ.cÁM ƠN BẠN NHÉ!!!MẮT VỚI MŨI

ChanhTQ@
17-04-09, 09:32 AM
Option Explicit
Sub TimTrung()
Dim Rng As Range, Clls As Range, sRng As Range
Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1
Set Rng = Range([B1], [B1].End(xlDown))
For Each Clls In Range([a1], [a1].End(xlDown))
If Clls.Offset(1) <> Clls Then
Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then _
[e65500].End(xlUp).Offset(1).Value = Clls.Value
End If
Next Clls
End Sub


Chú í: 'Cty D' sẽ không được thu nhận do khoảng trắng giữa 2 từ này ở 2 cột là khác nhau.

babykid
19-04-09, 10:10 PM
Mình mới vào 4rum lần đầu )*&^), có chuyện thắc mắc muốn hỏi ;;;;;;;;;;;, pác nào rành Excel thì giúp mình nhé . Thanks a lot ^^! |||||

Mình up file Excel lên , các pác lọc giùm mình dữ liệu 2 cột C và D , xem có cột nào trùng thì viết ra 1 cột riêng giùm mình --=0

duchuynh103
19-04-09, 10:27 PM
lọc giùm mình dữ liệu 2 cột C và D , xem có cột nào trùng thì viết ra 1 cột riêng giùm mình --=0

Chẳng hiểu tí gì cả!!! LỌC cái gì? TRÙNG cái gì?
Cho ví dụ ở file luôn đi bồ ơi!
Chú ý tên chủ đề nghen. "Phạm húy" rồi đó!

babykid
24-04-09, 03:02 PM
Hic ... thì dữ liệu 2 cột C và D đó , nhìn vào , cái nào trùng thì giúp em lọc ra 1 cột khác , đó gọi là "Tiếng Việt" đó bạn .
Mình viết Tiếng Việt chứ có viết tiếng Pakistan đâu mà sao khó tính thế -0-/.

HYen17
24-04-09, 03:27 PM
Hic ... thì dữ liệu 2 cột C và D đó , nhìn vào , cái nào trùng thì giúp em lọc ra 1 cột khác , đó gọi là "Tiếng Việt" đó bạn .
Mình viết Tiếng Việt chứ . . . Chưa thật sự hiểu hết ý bạn;

(*) Bạn cần lọc trang tính nào (Nó tên là gì). Bạn chỉ cần đưa lên trang tính cần lọc thôi. Đưa lên nhiều chẳng ích gì!

(*) Trang tính đó có được sắp xếp lại theo cột 'C' & 'D' bằng bất cứ cách nào không? Hay Bạn đã sắp xếp chúng rồi?

(*) Theo mình hiểu là các dòng nào trùng dữ liệu tại 2 trường này sẽ được lọc ra;
Vậy chỉ cần tô màu cho bạn được không? Nếu lọc cột khác là phải chép sang trang khác cho dễ xem xét có tiện cho bạn không?

Chờ tin bạn!

Nếu đúng nh7 ý mình hiểu sẽ có 17 dòng trùng nhau cả 2 trường trong đó có 9 dòng cả 2 trường không dữ liệu.

viendo
24-04-09, 04:26 PM
Mình mới vào 4rum lần đầu )*&^), có chuyện thắc mắc muốn hỏi ;;;;;;;;;;;, pác nào rành Excel thì giúp mình nhé . Thanks a lot ^^! |||||

Mình up file Excel lên , các pác lọc giùm mình dữ liệu 2 cột C và D , xem có cột nào trùng thì viết ra 1 cột riêng giùm mình --=0
Bạn xem file này có phải ý của bạn muốn làm không nhé rồi tính tiếp

thayde70
08-05-09, 04:49 PM
Nhờ các anh chị trên diễn đàn làm công thức để trích lọc những dữ liệu trùng nhau trên 2 cột để cho ra kết quả 1 dữ liệu duy nhất.
Sheet Data có nhiều những dữ liệu giống nhau trên cả 2 cột
Sheet Ketqua có dữ liệu khong trùng nhau. và phải nằm liền kề với nhau trên cùng 1 cột( không có dòng trống).
Với yều cầu như thế thì dùng công thức được không vậy? .
Cám ơn các anh chị nhiều

Mình gửi kèm file nhờ các bạn chỉ giúp dùm. Rất cám ơn các bạn.

ST-Lu!
08-05-09, 06:15 PM
Sub unique()
Dim i As Long, K As Long
Dim Vung1 As Range, Vung2 As Range, vung as range
Set Vung1 = Sheets(1).Range("A2:A" & [A1000].End(xlUp).Row)
Set Vung2 = Sheets(1).Range("B2:B" & [A1000].End(xlUp).Row)
Vung = Union(Vung1, Vung2)

For Each Cells In Vung
If Cells <> "" Then
K = K + 1

If i = Application.WorksheetFunction.Match(Cells, Vung, 0) Then
i = i + 1
End If

If K = i Then Sheets(2).Range("B:" & K) = Cells: Exit For
End If
End If
Next

End Sub


Thưa các Anh
Em thử nghịch một đoạn code nhưng không chạy được, vào tool/macro phần Run cứ bị mờ nên chẳng biết code trên sai hay đúng?

Chỉ dạy thêm cho em với

Cám ơn

ChanhTQ@
08-05-09, 06:50 PM
Option Explicit
Sub Macro1()
Dim eR As Long, lR As Long
Dim Sh As Worksheet

Application.ScreenUpdating = False: Sheets("Data").Select
Columns("A:B").Select: Selection.Insert Shift:=xlToRight
eR = [C65500].End(xlUp).Row

Range("B1:B" & eR - 1).Value = Range([c2], Cells(eR, "C")).Value
lR = [d65500].End(xlUp).Row
Range(Cells(eR, "B"), Cells(eR + lR - 2, "B")).Value = Range([d2], Cells(lR, "D")).Value

Range("B1:B" & eR + lR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[a1], Unique:=True
eR = [a65500].End(xlUp).Row
Set Sh = Sheets("KetQua"): Sh.Range(Sh.[a2], Sh.[a2].End(xlDown)).Clear

Sh.Range(Sh.[a2], Sh.Cells(eR, "A")).Value = Range([a1], [a1].End(xlDown)).Value
Columns("A:B").Delete
End Sub

thayde70
08-05-09, 07:39 PM
Option Explicit
Sub Macro1()
Dim eR As Long, lR As Long
Dim Sh As Worksheet

Application.ScreenUpdating = False: Sheets("Data").Select
Columns("A:B").Select: Selection.Insert Shift:=xlToRight
eR = [C65500].End(xlUp).Row

Range("B1:B" & eR - 1).Value = Range([c2], Cells(eR, "C")).Value
lR = [d65500].End(xlUp).Row
Range(Cells(eR, "B"), Cells(eR + lR - 2, "B")).Value = Range([d2], Cells(lR, "D")).Value

Range("B1:B" & eR + lR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[a1], Unique:=True
eR = [a65500].End(xlUp).Row
Set Sh = Sheets("KetQua"): Sh.Range(Sh.[a2], Sh.[a2].End(xlDown)).Clear

Sh.Range(Sh.[a2], Sh.Cells(eR, "A")).Value = Range([a1], [a1].End(xlDown)).Value
Columns("A:B").Delete
End Sub


Bạn ChanhTQ ơi!Bạn tải file đính kèm của mình về rồi bạn gắn macro này test thử dùm mình với, nếu đúng như kết quả thì bạn up cho mình ha. Tại vì mình chạy macro này nó bị báo lỗi. cám ơn sự nhiệt tình của bạn rất nhiều.

ChanhTQ@
08-05-09, 10:30 PM
Bạn tải file đính kèm của mình , nếu macro cho đúng như kết quả thì bạn up cho mình ha. Tại vì mình chạy macro này nó bị báo lỗi.Đó là lỗi gì vậy, đừng bí mật nữa có được không?

Macro của mình làm những việc sau:
Thêm mới 2 cột A & B - ở đây có thể phát sinh lỗi, nên CSDL của bạn xài 1 trong 2 cột cuối trang tính;
Chép nối dữ liệu 2 cột sang cột 'B'
Lập danh sách duy nhứt, bằng cách AdvancedFiilter (Unique)
Chép sang trang tính 'KQua'
Xóa 2 cột vừa tạo


:-= )(&&@@ @!## &&&%$R )(&&@@

ndu96081631
09-05-09, 07:30 AM
Sub unique()
Dim i As Long, K As Long
Dim Vung1 As Range, Vung2 As Range, vung as range
Set Vung1 = Sheets(1).Range("A2:A" & [A1000].End(xlUp).Row)
Set Vung2 = Sheets(1).Range("B2:B" & [A1000].End(xlUp).Row)
Vung = Union(Vung1, Vung2)

For Each Cells In Vung
If Cells <> "" Then
K = K + 1

If i = Application.WorksheetFunction.Match(Cells, Vung, 0) Then
i = i + 1
End If

If K = i Then Sheets(2).Range("B:" & K) = Cells: Exit For
End If
End If
Next

End Sub
Thưa các Anh
Em thử nghịch một đoạn code nhưng không chạy được, vào tool/macro phần Run cứ bị mờ nên chẳng biết code trên sai hay đúng?

Chỉ dạy thêm cho em với

Cám ơn
Sai nhiều lắm bạn ơi!
1>
Set Vung1 = Sheets(1).Range("A2:A" & [A1000].End(xlUp).Row) ---> Cái này sai vì đoạn [A1000].End(xlUp).Row chả biết thuộc sheet nào (đúng tại sheet nào chạy code thì nó sẽ theo sheet đó)
Đúng ra phải:
Set Vung1 = Range(Sheets(1).[A2], Sheets(1).[A1000].End(xlUp))
và Vung2 cũng sai tương tự
---------------------------
2> Vung = Union(Vung1, Vung2) ---> Sai
Đúng ra phải:
Set Vung = Union(Vung1, Vung2)
---------------------------
3>
For Each Cells In Vung ---> Sai vì Cells không thể đặt làm 1 biến được
Có thể sửa thành:
For Each Clls In Vung (chử gì cũng được, miển khác chử Cells)
--------------------------
4>
If i = Application.WorksheetFunction.Match(Cells, Vung, 0) Then ---> Sai cú pháp hàm MATCH... hàm MATCH chỉ dò trong 1 cột hoặc 1 dòng...
Và thêm nữa: Ngay từ vòng lập đầu tiên sẽ báo lổi vì i chưa tồn tại (phải cho i = bao nhiêu trước chứ)
vân vân và vân vân như:
Sheets(2).Range("B:" & K) ---> Sai
--------------------
Nói tóm lại sau khi sửa xong toàn bộ thì code vẫn chưa chạy, hoặc chạy sai ---> Có lẽ liên quan đến thuật toán (bạn bị lạc đường)

thayde70
10-05-09, 10:03 AM
Mình nhầm!, macro không có lỗi nhung cho KQ không đúng: có dữ liệu bị trùng và có dữ liệu không bị thiếu.

mio3049
02-06-09, 04:55 PM
Hiện mình có một bảng gồm nhiều danh mục khác nhau nằm ở nhiều sheet,những danh mục đó gồm nhiều dữ liệu trùng và không trùng mình muốn lấy một danh mục chung sang một sheet khác để tạo danh mục chung vào ko trùng.
Xin hãy hướng dẫn mình dùm hàm gì?

sealand
02-06-09, 05:10 PM
Mình hay gom bằng cách chép tất cả vào 1 sheet rồi dùng pivot table 1 nhát là có bảng danh mục chuẩn.

QuocPhong
02-06-09, 05:10 PM
Bạn muốn lọc các danh mục không trùng nhau ra một sheet riêng? Mình nghĩ bạn copy hết tất cả các danh mục đó vào 1 sheet rồi dùng Advanced Filter là được. Bạn gởi file lên thử xem.

Hai Lúa Miền Tây
02-06-09, 05:20 PM
Hiện mình có một bảng gồm nhiều danh mục khác nhau nằm ở nhiều sheet,những danh mục đó gồm nhiều dữ liệu trùng và không trùng mình muốn lấy một danh mục chung sang một sheet khác để tạo danh mục chung vào ko trùng.
Xin hãy hướng dẫn mình dùm hàm gì?
Bạn thử dùng code của anh ndu96081631 thử xem sao nhé

Sub Test()
Sheet3.Range("A1:C1000").Clear
With Sheet1.Range("A28").CurrentRegion.Offset(1)
.Copy
With Sheet2.Range("A1").CurrentRegion
.Offset(.Rows.Count)(1, 1).PasteSpecial
With Sheet2.Range("A1").CurrentRegion
.AdvancedFilter 2, , Sheet3.Range("A1"), True
End With
With .Offset(.Rows.Count)
Range(.Cells, .End(xlDown)).Clear
End With
End With
End With
End Sub

Có cả file test luôn nhé.
Thân

mafia8486
03-06-09, 12:23 AM
Mình có dữ liệu gốc là 4 cột A,B,C,D HAI CỘT C VA D ĐƯỢC SORT THEO GIÁ TRỊ TĂNG DẦN
CẦN SO SÁNH GIỮA CỘT C VÀ CỘT D NẾU CÓ GIÁ TRỊ BẰNG NHAU (SỐ LƯỢNG CŨNG BẰNG NHAU) CHÌ CHUYỂN SANG SHEET TRÙNG NHAU
CÒN NẾU GIÁ TRỊ CỘT C (HOẶC D) KHÔNG CÓ GIÁ TRỊ TRÙNG TẠI CỘT D (HOẶC C) HAY SỐ LƯỢNG GIÁ TRỊ KHÔNG BẰNG NHAU THÌ SẼ CHUYỂN SANG SHEET LỆCH
vd:mình đã tự làm trong file excel gửi kèm (mình muốn số liệu có thể chuyển sang 2 sheet trùng nhau và sheet lệch từ sheet đầu bài giống file gửi kèm)
Xin cảm ơn các thầy và các bạn thanks

chibi
03-06-09, 05:12 AM
Đã đọc kỹ, xem file đính kèm nhưng vẫn không hiểu.

SA_DQ
03-06-09, 06:27 AM
Bà con làng xóm xem đây: Trang tính đầu bài như vầy:
A|B|C|D|
1A|1|2|2b|=> Trùng
2A|2|4|4b|
3A|3|4|4b|
4A|4|6|6b|
5A|5|6|6b|
6A|6|7|7b|=> Trùng
7A|7|8|8b|=> Trùng
8A|8|10|10b| >> không đem
||||!$@!!


(Cớ sao dòng cuối không được đem sang trang 'Trùng'?)

mafia8486
03-06-09, 06:55 AM
Bà con làng xóm xem đây: Trang tính đầu bài như vầy:
A|B|C|D|
1A|1|2|2b|=> Trùng
2A|2|4|4b|
3A|3|4|4b|
4A|4|6|6b|
5A|5|6|6b|
6A|6|7|7b|=> Trùng
7A|7|8|8b|=> Trùng
8A|8|10|10b| >> không đem
||||!$@!!

(Cớ sao dòng cuối không được đem sang trang 'Trùng'?)
Vì cột C không có 10 mà bác,các giá trị trùng là có cả ở cột B và C (cả giá trị và số lượng) hai cột A và D chỉ lấy theo C và D tương ứng thôi,cám ơn bác đã quan tâm

viendo
03-06-09, 09:03 AM
Vì cột C không có 10 mà bác,các giá trị trùng là có cả ở cột B và C (cả giá trị và số lượng) hai cột A và D chỉ lấy theo C và D tương ứng thôi,cám ơn bác đã quan tâm

Theo tôi hiểu thì tác giả topic yêu cầu so sánh 2 cột B và C, trích trùng khi :
=AND(có xuất hiện ở 2 cột, có số lượng trên mỗi cột bằng nhau)Còn lệch thì chưa hiểu thế nào hichic

DOSNET
03-06-09, 09:06 AM
Đầu bài lủng củng nhất Dosnet từng gặp !


CẦN SO SÁNH GIỮA CỘT C VÀ CỘT D NẾU CÓ GIÁ TRỊ BẰNG NHAU (SỐ LƯỢNG CŨNG BẰNG NHAU) CHÌ CHUYỂN SANG SHEET TRÙNG NHAU


Riêng có mỗi điều kiện này đã phải chuyển cả bảng sang sheet trùng nhau rồi ! Đề nghị tác giả "Mafia" làm rõ thêm

mafia8486
03-06-09, 12:21 PM
THANKS BÁC viendo nhiều nhiều nhé,bác giúp em được cái lệch nữa thì hay quá (em dốt văn thật)

viendo
03-06-09, 01:52 PM
THANKS BÁC viendo nhiều nhiều nhé,bác giúp em được cái lệch nữa thì hay quá (em dốt văn thật)
Xem cái lệch này có được không nhé

kevin_mn
12-06-09, 04:01 PM
Hi mấy bác, mấy bác giúp em có hàm nào lọc ra dữ liệu mà ko bị trùng ko? Máy bác xem file đính kèm của em.

Hai Lúa Miền Tây
12-06-09, 04:38 PM
Hi mấy bác, mấy bác giúp em có hàm nào lọc ra dữ liệu mà ko bị trùng ko? Máy bác xem file đính kèm của em.
Bạn dùng Advance filter rồi chọn lấy dữ liệu duy nhất, recorde lại macro đó mà dùng thôi
Thân

kevin_mn
12-06-09, 04:43 PM
Bác domfootwear (http://www.giaiphapexcel.com/forum/member.php?u=42738) có cách nào khác ngoài Advance filter không. Có hàm nào làm được điều đó ko? Dùng hàm nhé bác.
Mình cũng biết là dùng Advance rồi chọn copy to another location và chọn unique ... Ở mục copy to chọn ô để parst dữ liệu đã copy ( ko trùng).

thanh_tks
12-06-09, 05:12 PM
Bác domfootwear (http://www.giaiphapexcel.com/forum/member.php?u=42738) có cách nào khác ngoài Advance filter không. Có hàm nào làm được điều đó ko? Dùng hàm nhé bác.
Mình cũng biết là dùng Advance rồi chọn copy to another location và chọn unique ... Ở mục copy to chọn ô để parst dữ liệu đã copy ( ko trùng).
xem thử có đúng không?

Hai Lúa Miền Tây
12-06-09, 05:13 PM
Bác domfootwear (http://www.giaiphapexcel.com/forum/member.php?u=42738) có cách nào khác ngoài Advance filter không. Có hàm nào làm được điều đó ko? Dùng hàm nhé bác.
Mình cũng biết là dùng Advance rồi chọn copy to another location và chọn unique ... Ở mục copy to chọn ô để parst dữ liệu đã copy ( ko trùng).
Vậy bạn tham khảo file đính kèm nhé.
Thân

hoangdanh282vn
12-06-09, 05:26 PM
Hi mấy bác, mấy bác giúp em có hàm nào lọc ra dữ liệu mà ko bị trùng ko? Máy bác xem file đính kèm của em.

Nếu bạn chưa biết nhiều về mảng và công thức mảng thì bạn nên dùng cột phụ cho dễ hiểu.
bạn xem file nha

kevin_mn
16-06-09, 09:59 PM
Thanks Máy bác nhiều nhé.

Tony Jaa
11-07-09, 02:44 PM
Chào cả nhà!

Trong file đính kèm tại sheet DATA, căn cứ vào cột bộ phận, cột chức danh, tôi dùng code lọc danh mục duy nhất sang sheet "Tổng hợp nguồn nhân lực" để tính toán tổng hợp số liệu, các chỉ tiêu (theo như bảng biểu trong sheet "Tổng hợp nguồn nhân lực".

Phát sinh vấn đề sai lỗi, mình tìm mãi chẳng ra, như thế này:


Cột Bộ phận tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 38 bộ phận. Không hiểu tại sao, code này chỉ lọc ra được 33 bộ phận (thiếu mất 5 bộ phận), nhưng khi ta gõ thêm những ký tự bất kỳ vào những dòng trống dưới cùng của cột bộ phận tại sheet DATA thì lúc này nó lại lọc đủ ra 38 bộ phận.


Tương tự trường hợp trên: Cột Chức danh tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 19 chức danh. Không hiểu tại sao, code này chỉ lọc ra được 14 bộ phận (thiếu mất 5 chức danh)...


Nhờ các bác nghiên cứu, xem xét (file gửi kèm)!

Cảm ơn các bác nhiều!

MinhNguyệt
11-07-09, 03:42 PM
Chào cả nhà!

Trong file đính kèm tại sheet DATA, căn cứ vào cột bộ phận, cột chức danh, tôi dùng code lọc danh mục duy nhất sang sheet "Tổng hợp nguồn nhân lực" để tính toán tổng hợp số liệu, các chỉ tiêu (theo như bảng biểu trong sheet "Tổng hợp nguồn nhân lực".

Phát sinh vấn đề sai lỗi, mình tìm mãi chẳng ra, như thế này:


Cột Bộ phận tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 38 bộ phận. Không hiểu tại sao, code này chỉ lọc ra được 33 bộ phận (thiếu mất 5 bộ phận), nhưng khi ta gõ thêm những ký tự bất kỳ vào những dòng trống dưới cùng của cột bộ phận tại sheet DATA thì lúc này nó lại lọc đủ ra 38 bộ phận.
Tương tự trường hợp trên: Cột Chức danh tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 19 chức danh. Không hiểu tại sao, code này chỉ lọc ra được 14 bộ phận (thiếu mất 5 chức danh)...


Nhờ các bác nghiên cứu, xem xét (file gửi kèm)!

Cảm ơn các bác nhiều!


Bạn trừ mất 5 dòng thì hỏi làm sao ra 38 được? Sửa lại như sau :


Sub TaoBoPhan()
Dim BoPhan As Range
S01.Select
On Error Resume Next
S01.ShowAllData
Range("HH3:HH1000").Clear
eR = Range("D10000").End(xlUp).Row
Set BoPhan = S01.Range("D3:D" & eR)
With S01
With BoPhan
.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=S01.Range( _
"HH3"), Unique:=True
End With
.Names("Extract").Delete
eR1 = .Range("HH1000").End(xlUp).Row
S17.Range("A7:B55").ClearContents
S17.Range("B7:B" & eR1 + 4).Value = .Range("HH3:HH" & eR1).Value
S17.Range("A7:A" & eR1 + 4).FormulaR1C1 = "=ROW()-6"
S17.Range("A7:A" & eR1 + 4).Value = S17.Range("A7:A" & eR1 + 4).Value
.Range("HH3:HH" & eR1).Clear
End With
Set BoPhan = Nothing
End Sub


Nói cho rõ thêm : Cột HH của S01 bạn tính từ hàng thứ 3, cột A và B của S17 bạn tính bắt đầu từ hàng thứ 7, vì thế phải lấy eR1+4 là vì thế
Thân

Tony Jaa
11-07-09, 04:29 PM
Bạn trừ mất 5 dòng thì hỏi làm sao ra 38 được? Sửa lại như sau :


Sub TaoBoPhan()
Dim BoPhan As Range
S01.Select
On Error Resume Next
S01.ShowAllData
Range("HH3:HH1000").Clear
eR = Range("D10000").End(xlUp).Row
Set BoPhan = S01.Range("D3:D" & eR)
With S01
With BoPhan
.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=S01.Range( _
"HH3"), Unique:=True
End With
.Names("Extract").Delete
eR1 = .Range("HH1000").End(xlUp).Row
S17.Range("A7:B55").ClearContents
S17.Range("B7:B" & eR1 + 4).Value = .Range("HH3:HH" & eR1).Value
S17.Range("A7:A" & eR1 + 4).FormulaR1C1 = "=ROW()-6"
S17.Range("A7:A" & eR1 + 4).Value = S17.Range("A7:A" & eR1 + 4).Value
.Range("HH3:HH" & eR1).Clear
End With
Set BoPhan = Nothing
End Sub


Nói cho rõ thêm : Cột HH của S01 bạn tính từ hàng thứ 3, cột A và B của S17 bạn tính bắt đầu từ hàng thứ 7, vì thế phải lấy eR1+4 là vì thế
Thân

Cảm ơn anh / chị nhiều!
Chúc anh / chị ngày càng nhiều sức khỏe, thành đạt & hạnh phúc!

ndu96081631
11-07-09, 07:07 PM
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu

Tony Jaa
11-07-09, 10:10 PM
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu

Vậy phải sửa chỗ nào cho đúng tuyệt đối, bác chỉ cho em luôn đi?
Cảm ơn bác!

yeudoi
12-07-09, 07:46 AM
Vậy phải sửa chỗ nào cho đúng tuyệt đối, bác chỉ cho em luôn đi?
Cảm ơn bác!
Thì bạn chuyển sang lấy từ D2 thử là được. Bạn không nên đặt tên sheet tiếng Việt có dấu

ndu96081631
12-07-09, 09:19 AM
Vậy phải sửa chỗ nào cho đúng tuyệt đối, bác chỉ cho em luôn đi?
Cảm ơn bác!
Đúng như bạn yeudoi nói ấy... khi xác định vùng dử liệu sẽ lọc bằng Advanced Filter, bạn phải lấy luôn tiêu đề (cụ thể với file của bạn phải lấy từ cell D2 trở xuống) ---> Sau khi lọc ra vùng phụ, bạn xóa tiêu đề đi rồi muốn làm gì tiếp tùy thích

MinhNguyệt
12-07-09, 03:51 PM
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu

Đúng là hôm qua chỉ chú ý đến vụ Thiếu dữ liệu mà không xem kỹ phần AD này. Khi lọc theo AD cần chú ý cả dòng tiêu đề
Thân

thanhyuse
04-08-09, 09:19 AM
Vậy bạn tham khảo file đính kèm nhé.
Thân

Cám ơn anh đã coa một lời giải rất hay, nhưng nếu đặt trong vấn đề của tôi, thì nó đã giải quyết được 50% rồi, tức là anh đã tạo một cột mới, có các giá trị không trùng.

Tiếp theo, tôi muốn nhờ anh tao ra một cột nữa tương ứng mà nội dung là số lần một đối tượng trùng lặp như file tôi đính kèm.

Xin cám ơn!

DOSNET
04-08-09, 09:35 AM
Đếm số lần trùng thì bạn dùng hàm COUNTIF. thân!


H4=COUNTIF(Data!$B$1:$B$21,kq!G4)

Hai Lúa Miền Tây
04-08-09, 09:38 AM
Cám ơn anh đã coa một lời giải rất hay, nhưng nếu đặt trong vấn đề của tôi, thì nó đã giải quyết được 50% rồi, tức là anh đã tạo một cột mới, có các giá trị không trùng.

Tiếp theo, tôi muốn nhờ anh tao ra một cột nữa tương ứng mà nội dung là số lần một đối tượng trùng lặp như file tôi đính kèm.

Xin cám ơn!

Bạn dùng hàm CountIf nhé

Cell H4=COUNTIF(Data!$B$2:$B$21,G4)

Thân