Xin giúp em một số vấn đề về lọc dữ liệu (1 người xem)

Liên hệ QC

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

vdcuong

Thành viên mới
Tham gia
3/10/09
Bài viết
19
Được thích
0
Em có một file dữ liệu như đính kèm.
Em muốn lọc:
+ Trong cột A ở Sheet 1 tất cả các ô có dãy số dạng "*-****-*****" tự động điền sang cột A bên sheet 2 (em muốn nếu được thì dùng hàm công thức còn nếu không thì các bác lập cho em VBA, nhưng ưu tiên công thức vì em dốt VBA nên không hiểu và cũng không biết dùng ntn?). Em dùng thử cách lọc advance filter và loại bỏ dòng trắng và dòng nền màu rồi nhưng em thấy hơi thủ công, không biết các bác có sáng kiến nào giúp em?

+ Các cột tiếp theo bên sheet 2 em muốn lọc các dữ liệu bên sheet 1 sang dựa vào dữ liệu cột A. Em có ý tưởng dùng hàm Vlookup nhưng chưa biết dùng thế nào, mong các bác chỉ giáo.

Em mới làm tìm hiểu Excel nên còn kém lắm, mong các bác chỉ cụ thể giúp em.

Xin cám ơn các bác trước ạ!!!

Em mới tham gia diễn đàn, không biết có hỏi đúng chỗ không, nếu có gì sai sót các bác bỏ qua cho em ^^
 

File đính kèm

Các bác có kiến giải gì không vào giúp em với!
 
Các bác có kiến giải gì không vào giúp em với!
Tôi thấy dữ liệu bạn không đồng nhất không theo thứ tự cụ thể như
1-1996-01765 - Dữ liệu thư mục:Có Số bằng,Ngày cấp,Số đơn ...còn 1-1997-00286 - Dữ liệu thư mục:có Số công bố đơn:,Số đơn,Ngày nộp đơn.Và ở sheet 2 bạn yêu cầu như thế không được khả thi lắm rất mất thời gian.Và tại sao cột E sao không nằm chung cột B(sheet 1)
 
Tôi thấy dữ liệu bạn không đồng nhất không theo thứ tự cụ thể như
1-1996-01765 - Dữ liệu thư mục:Có Số bằng,Ngày cấp,Số đơn ...còn 1-1997-00286 - Dữ liệu thư mục:có Số công bố đơn:,Số đơn,Ngày nộp đơn.Và ở sheet 2 bạn yêu cầu như thế không được khả thi lắm rất mất thời gian.Và tại sao cột E sao không nằm chung cột B(sheet 1)


Cảm ơn bác đã lưu ý giúp em.

Thực sự vấn đề ở đây là:
+ Dữ liệu ở Sheet 1 là dạng dữ liệu pdf, khi copy ra có dạng như trên nên có chuyện cột E không nằm chung cột B
+ Em xin trình bày ý tưởng của em là:
Ví dụ vùng (A4:F13) em dùng một hàm tìm kiếm, tìm những ô có dữ liệu như: Số bằng, Số đơn, ... nếu tìm thấy thì lấy dữ liệu bên phải địa chỉ vị trí của ô dữ liệu đó điền vào bên Sheet 2 tương ứng. Từng vùng này (những vùng màu nền xám) lấy vị trí từ dữ liệu các ô tương ứng ở cột A, ví dụ vùng (A4:F13) suy ra từ vị trí ô A3, thực ra các dữ liệu vùng nền xám không cố định, có vùng 10 dòng, có vùng 11, có vùng 9 nhưng em để ý nhiều nhất là 11 nên em có thể lấy cố định các vùng nền xám là 11 dòng để mình lấy vị trí tương đối so với các ô dữ liệu chuẩn ở cột A.

Đây là dữ liệu không cố định về số dòng vì là dữ liệu tra cứu sẽ có nhiều hoặc ít các vùng xám, nên em không thể cho chung cột E vào cột B (khi tra cứu kiểu khác sẽ có số lượng các vùng xám khác nhau). Em muốn xây dựng thuật toán để thống kê các dữ liệu tìm thấy sang Sheet 2 để dễ thống kê và sử dụng nên mới có ý tưởng này. Mong các bác giúp đỡ.
 
Ý tưởng của em là như vậy, mong các bác hướng dẫn xây dựng hàm công thức giúp em
 
Xem thử trong file đính kèm nhé!
 

File đính kèm

<br>Bạn dùng công thức cóc ổi này được không nha
Rất cám ơn bạn, tuy nhiên mình đã nói rõ là file này không cố định số lượng ô nền xám và cũng không thể đánh số thủ công như bạn được (mục đích không muốn thủ công như thế) nên cách này không đúng ý mình, nhưng cũng rất cám ơn bạn vì đã cho mình một hướng đi mới cho vấn đề này.

Xem thử trong file đính kèm nhé!
Theo em mới quan sát sơ qua thì bác rất đúng ý em, nếu bác có thời gian có thể diễn giải cụ thể hàm bác sử dụng cho em được rõ, vì em cũng chưa dùng hàm ISERROR bao giờ nên chưa biết thế nào.
Em chân thành cám ơn bác!!!
 
Theo em mới quan sát sơ qua thì bác rất đúng ý em, nếu bác có thời gian có thể diễn giải cụ thể hàm bác sử dụng cho em được rõ, vì em cũng chưa dùng hàm ISERROR bao giờ nên chưa biết thế nào.
Em chân thành cám ơn bác!!!
Đối với những file excel trích xuất từ các phần mềm khác (word, pdf,...) với kết cấu không cố định thế này thường rất phức tạp khi trích xuất. Do đó cần kết hợp với nhiều hàm khác nhau và có thuật toán hợp lý mới giải quyết được.
Thuật tóan :
* Xác định điểm đầu-điểm cuối của từng vùng dữ liệu: Các vùng dữ liệu được đánh dấu từ số đơn đến số đơn: Cột A, các ô kết thúc bằng dấu":"
Name: Vitri:
Mã:
=IF(RIGHT(Sheet1!$A$1:$A$152)=":",ROW(Sheet1!$A$1:$A$152))
* Xác định 2 mảng dữ liệu (M_1, M_2) trong từng vùng dữ liệu tương ứng số đơn: Vì các thông tin cần trích xuất sắp xếp bất kỳ trong 2 mảng (cột B,C và cột E,F).
* Dùng VLOOKUP để tìm kiếm trong 2 mảng.

* Hàm ISERROR(biểu thức): Trả về giá trị TRUE nếu biểu thức lỗi, FALSE nếu biểu thức đúng.
* IF(ISERROR(VLOOKUP1),VLOOKUP2,VLOOKUP1): Nếu VLOOKUP1 bị lỗi (không tìm thấy trong mảng 1) thì thực hiện VLOOKUP2 (tìm trong mảng 2), nếu VLOOKUP1 tìm thấy thì tìm trong mảng 1.
Chúc bạn thành công.
 
Bác có thể nói rõ hơn về hàm bác dùng ở cột A sheet 2 được không ạ? Bác diễn giải giúp em! Em chưa hiểu rõ lắm.
Cảm ơn bác!
 
Bác có thể nói rõ hơn về hàm bác dùng ở cột A sheet 2 được không ạ? Bác diễn giải giúp em! Em chưa hiểu rõ lắm.
Cảm ơn bác!

* Name:Vitri
Mã:
=IF(RIGHT(Sheet1!$A$1:$A$152)=":",ROW(Sheet1!$A$1:$A$152))
Tương ứng với những vị trí trong A1:A152 tận cùng bằng dấu hai chấm ":" thì lấy số nguyên trong chuỗi số nguyên ROW(...) = {1;2;3;...;152}
Ta có Vitri = {0;0;3;0;0;...;0;17;0;0;...)

Xét tại dòng dầu tiên, ô A2:
*SMALL(Vitri,ROW(1:1))
Lấy giá trị nhỏ thứ 1 trong Vitri (= 3)

*INDEX(Sheet1!$A$1:$A$152,3)
tìm giá trị trong A1:A152, thứ tự dòng là 3
trả về chuỗi "1-1996-01765 - Dữ liệu thư mục:"

*LEFT("1-1996-01765 - Dữ liệu thư mục:",12) = "1-1996-01765"

*COUNTA($A$1:A1)<=COUNT(Vitri): Bẫy lỗi, nếu hết danh sách thì trả về ô trống.

* Công thức tổng:
Mã:
=IF(COUNTA($A$1:A1)<=COUNT(Vitri),LEFT(INDEX(Sheet1!$A$1:$A$152,SMALL(Vitri,ROW(1:1))),12),"")
Nếu chưa hết danh sách, thì lấy tiếp danh sách, còn không thì trả về giá trị rỗng.

Từ dòng kế tiếp, ô A2: Giá trị nhỏ thứ hai (ROW(2:2)) sẽ là 17
 
Web KT

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

Back
Top Bottom