Trích lọc dữ liệu ở nhiều sheet dựa vào điều kiện (5 người xem)

Liên hệ QC

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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,701
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Em chào Anh Chị!

Em có vấn đề nhờ mọi người hỗ trợ,

Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
 

File đính kèm

Em chào Anh Chị!

Em có vấn đề nhờ mọi người hỗ trợ,

Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Cái này mà dùng hàm cực lắm em, nếu chỉ có 2 sheet thì dễ, nhưng đến một lúc nào đó có nhu cầu mở rộng thì công thức này coi như phá sản. Trong trường hợp này tôi nghĩ code là hợp lý.
 
Cái này mà dùng hàm cực lắm em, nếu chỉ có 2 sheet thì dễ, nhưng đến một lúc nào đó có nhu cầu mở rộng thì công thức này coi như phá sản. Trong trường hợp này tôi nghĩ code là hợp lý.
Anh có thể đưa hai giải pháp là code VBA và công thức được không Anh? Bài này em sử dụng cột phụ mà nó báo lỗi.
Em cảm ơn Anh nhiều!
 
Anh có thể đưa hai giải pháp là code VBA và công thức được không Anh? Bài này em sử dụng cột phụ mà nó báo lỗi.
Em cảm ơn Anh nhiều!
Công thức là dùng cột phụ đánh số ở sheet thứ nhất, sau đó sheet 2 cũng dùng cột phụ tương tự, sau đó bên sheet tổng dùng công thức nếu số lượng dòng (dùng row() để đếm số dòng) nhỏ hơn hoặc bằng số lượng ngày thảo mãn ở sheet 1 thì trích lọc từ sheet 1 còn nếu lớn hơn thì trích lọc từ sheet 2.
Còn code thì duyệt qua tất cả các sheet để lọc thôi.
 
Em chào Anh Chị!

Em có vấn đề nhờ mọi người hỗ trợ,

Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Xem file này xem sao
Mã:
Sub Data(sh As Worksheet, Arr_D(), Dk As Long, K As Long)
Dim i As Long
Dim Dcuoi As Long
Dim Arr_N()
Dcuoi = sh.Range("A1000000").End(xlUp).Row
Arr_N = sh.Range("A3:E" & Dcuoi)
For i = 1 To UBound(Arr_N, 1)
    If Arr_N(i, 2) = Dk Then
        K = K + 1
        Arr_D(K, 1) = Arr_N(i, 1)
        Arr_D(K, 2) = Arr_N(i, 3)
        Arr_D(K, 3) = Arr_N(i, 4)
        Arr_D(K, 4) = Arr_N(i, 5)
    End If
Next
End Sub
Mã:
Sub Main()
Dim K As Long
Dim Arr_D(1 To 100000, 1 To 4)
Dim Dk As Long
Dk = Sheet1.Range("D1")
Sheet1.Range("A3:D100000").Clear
K = 0
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet2, Arr_D(), Dk, K)
If K = 0 Then Exit Sub
Sheet1.Range("A3").Resize(K, 4) = Arr_D
Sheet1.Range("A3").Resize(K, 4).Borders.LineStyle = 1
End Sub
nếu có bao nhiêu sheet thì gọi cái này bấy nhiêu lần
Call Data(Sheet2, Arr_D(), Dk, K)
Chú ý các sheet phải tương đồng với nhau, và dòng bắt đầu nên đồng nhất nha
P/S Bài này sử dụng công thức không khả thi nha
 

File đính kèm

Lần chỉnh sửa cuối:
Em chào Anh Chị!
Em có vấn đề nhờ mọi người hỗ trợ,
Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Anh phục em tính kiên trì rồi đó! :)
Đã hỏi thì hỏi cho tới nơi tới chốn, không bỏ cuộc.
Giải pháp: (thật sự anh cũng mới nghĩ đến từ bài hỏi link này: https://www.giaiphapexcel.com/diendan/threads/cách-nối-nhiều-sheeet-thành-1-sheet.137430/#post-878754. Bài của em cũng tương tự).

Sheet 'Tổng':
  1. Cung cấp và điền tên các sheet của các Nhóm vào cột I.
  2. Đếm xem mỗi nhóm có bao nhiêu dòng thỏa điều kiện ngày tại D1=09/01/2018, ghi nhận vào cột J.
  3. Liệt kê các nhóm theo số lượng vừa tìm được, ghi vào cột F. ==> nhằm cung cấp tên Sheet cần lấy
  4. Truy lục hàng số mấy của dòng thỏa theo từng tên sheet vừa tìm được, ghi vào cột G. ==> nhằm cung cấp số dòng cần lấy
  5. Dòng 3 từ A3: D3 là xác định trước các cột (cố định) của các Sheet 'Nhóm....' ==> nhằm cung cấp tên cột cần lấy
  6. Dùng INDIRECT() theo các thông tin đã tìm được ở trên.
Xem file kèm.

Thân
 

File đính kèm

Có công thức cho cột I không vậy anh ? Hay phải nhập thủ công, em thấy có nhiều sheet tên rất khó
Ngộ nhỡ sai thì chết.
Em cám ơn anh nhiều ;)
Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào. :p

À! anh vừa lục lọi tìm được 1 cách nữa:
  1. Tạo name: 'SheetNames' =REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
  2. Mã:
    I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
    Enter, fill xuống.
Tham khảo các cách trong file kèm.

Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào. :p

À! anh vừa lục lọi tìm được 1 cách nữa:
  1. Tạo name: 'SheetNames' =REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
  2. Mã:
    I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
    Enter, fill xuống.
Tham khảo các cách trong file kèm.

Thân
Cám ơn anh. Đúng là cái em đang cần.:yeah:
Chúc anh luôn giữ mãi bầu nhiệt huyết cùng GPE
 

File đính kèm

Xem file này xem sao
Mã:
Sub Data(sh As Worksheet, Arr_D(), Dk As Long, K As Long)
Dim i As Long
Dim Dcuoi As Long
Dim Arr_N()
Dcuoi = sh.Range("A1000000").End(xlUp).Row
Arr_N = sh.Range("A3:E" & Dcuoi)
For i = 1 To UBound(Arr_N, 1)
    If Arr_N(i, 2) = Dk Then
        K = K + 1
        Arr_D(K, 1) = Arr_N(i, 1)
        Arr_D(K, 2) = Arr_N(i, 3)
        Arr_D(K, 3) = Arr_N(i, 4)
        Arr_D(K, 4) = Arr_N(i, 5)
    End If
Next
End Sub
Mã:
Sub Main()
Dim K As Long
Dim Arr_D(1 To 100000, 1 To 4)
Dim Dk As Long
Dk = Sheet1.Range("D1")
Sheet1.Range("A3:D100000").Clear
K = 0
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet2, Arr_D(), Dk, K)
If K = 0 Then Exit Sub
Sheet1.Range("A3").Resize(K, 4) = Arr_D
Sheet1.Range("A3").Resize(K, 4).Borders.LineStyle = 1
End Sub
nếu có bao nhiêu sheet thì gọi cái này bấy nhiêu lần
Call Data(Sheet2, Arr_D(), Dk, K)
Chú ý các sheet phải tương đồng với nhau, và dòng bắt đầu nên đồng nhất nha
P/S Bài này sử dụng công thức không khả thi nha
Anh @phihndhsp ơi!,Khi em copy tên nhân viên vào thì kết quả vẫn là nhân viên cũ ban đầu.
Bài đã được tự động gộp:

Góp thêm cách dùng các hàm excel 2007
Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào. :p

À! anh vừa lục lọi tìm được 1 cách nữa:
  1. Tạo name: 'SheetNames' =REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
  2. Mã:
    I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
    Enter, fill xuống.
Tham khảo các cách trong file kèm.

Thân
Em cảm ơn 2 Anh rất nhiều!
Chúc hai Anh một buổi tối vui vẻ!
 
Anh @phihndhsp ơi!,Khi em copy tên nhân viên vào thì kết quả vẫn là nhân viên cũ ban đầu.
Bài đã được tự động gộp:



Em cảm ơn 2 Anh rất nhiều!
Chúc hai Anh một buổi tối vui vẻ!
bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậy
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet3, Arr_D(), Dk, K)
bạn chỉnh lại chỗ này một tí tôi gọi lộn hai cái giống nhau
 

File đính kèm

Lần chỉnh sửa cuối:
bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậy
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet3, Arr_D(), Dk, K)
bạn chỉnh lại chỗ này một tí tôi gọi lộn hai cái giống nhau
 

File đính kèm

bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậy
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet3, Arr_D(), Dk, K)
bạn chỉnh lại chỗ này một tí tôi gọi lộn hai cái giống nhau
Em cảm ơn Anh Phi nhiều!

Em chúc Anh một buổi tối an lành!
 
Web KT

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

Back
Top Bottom