Tìm kiếm và copy dữ liệu sang sheet khác khi nhập vào điều kiện thời gian trong khoảng

Liên hệ QC

conmavodanh

Thành viên mới
Tham gia
15/11/08
Bài viết
8
Được thích
0
Chào các anh/chị/em trong GPE
Mình có 1 file danh sách các CBCNV cần lọc theo điều kiện kết thúc thời gian thử việc: VD từ 15/6 đến 15/7 (cột M) của năm nào đó và copy dữ liệu đó qua 1 bảng (sheet mới).
Mong được anh/chị/em hỗ trợ thực hiện. Cái này xài công thức được không hay phải xài VBA?
Cảm ơn mọi người nhiều!
 

File đính kèm

  • mau.xlsx
    355.5 KB · Đọc: 8
Chào các anh/chị/em trong GPE
Mình có 1 file danh sách các CBCNV cần lọc theo điều kiện kết thúc thời gian thử việc: VD từ 15/6 đến 15/7 (cột M) của năm nào đó và copy dữ liệu đó qua 1 bảng (sheet mới).
Mong được anh/chị/em hỗ trợ thực hiện. Cái này xài công thức được không hay phải xài VBA?
Cảm ơn mọi người nhiều!
Thích nhấn 1 phát ăn ngay thì bạn nghiên cứu advanced filter.
Chậm hơn tí thì lọc thông thường rồi copy tay.
Dữ liệu phải chuẩn nha bạn. Nếu file này bạn tổng hợp nhập liệu từ nhiều người mà người gõ d/m/y người gõ m/d/y là chịu đấy :D
 

File đính kèm

  • capture.png
    capture.png
    18.1 KB · Đọc: 18
Thích nhấn 1 phát ăn ngay thì bạn nghiên cứu advanced filter.
Chậm hơn tí thì lọc thông thường rồi copy tay.
Dữ liệu phải chuẩn nha bạn. Nếu file này bạn tổng hợp nhập liệu từ nhiều người mà người gõ d/m/y người gõ m/d/y là chịu đấy :D

Cảm ơn bạn đã phản hồi nhưng dữ liệu mình nhập chuẩn theo dd/mm/yyyy nhé.
Mình làm thử theo advance fillter rồi nhưng ko được.
 
Cảm ơn bạn đã phản hồi nhưng dữ liệu mình nhập chuẩn theo dd/mm/yyyy nhé.
Mình làm thử theo advance fillter rồi nhưng ko được.
Bạn thử tìm hiểu advaned filter trước, làm ra kết quả rồi mới nghĩ đến việc record macro và tạo 1 button và gán chạy macro đó.
 

File đính kèm

  • mau-1.xlsm
    371 KB · Đọc: 6
Bạn thử tìm hiểu advaned filter trước, làm ra kết quả rồi mới nghĩ đến việc record macro và tạo 1 button và gán chạy macro đó.

Cảm ơn bạn đã giúp đỡ. Mình đang nghiên cứu thêm. Nếu vẫn chưa hiểu mình sẽ liên hệ nhờ bạn giúp tiếp. Rất cảm ơn
 
Chào các anh/chị/em trong GPE
Mình có 1 file danh sách các CBCNV cần lọc theo điều kiện kết thúc thời gian thử việc: VD từ 15/6 đến 15/7 (cột M) của năm nào đó và copy dữ liệu đó qua 1 bảng (sheet mới).
Mong được anh/chị/em hỗ trợ thực hiện. Cái này xài công thức được không hay phải xài VBA?
Cảm ơn mọi người nhiều!
Tham khảo thêm dùng VBA. (Trích theo code của anh @Ba Tê)
Xem file kèm.
Thân.
 

File đính kèm

  • mau.xlsb
    180 KB · Đọc: 20
Tham khảo thêm dùng VBA. (Trích theo code của anh @Ba Tê)
Xem file kèm.
Thân.
Cảm ơn bạn đã giúp. Cho mình hỏi đoạn code này từng dòng lệnh có ý nghĩa như nào nhé. Mình gà nên không hiểu lắm:

Sub Loc()
Dim Rng As Range
Application.ScreenUpdating = False
Range("R1:S1").Value = Range("M7").Value >>> dòng lệnh này là chọn vùng data đúng ko?
Range("R2").Value = "="">=""&R[0]C[-5]" >>> dòng lệnh này là điều kiện còn các tham số là ntn vậy bạn? R, C có phải là hàng và cột không?
Range("S2").Value = "=""<=""&R[1]C[-6]"
Set Rng = Range("A7", Range("C7").End(xlDown)).Resize(, 16) >>> giải thích giúp mình các tham số sau lệnh
Rng.Select
Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("R1:S2") >>> không hiểu tham số trong điềều kiện nghĩa là gì? R1:S2 đại diện cho cái gì?
Range("R1:S2").ClearContents
Application.ScreenUpdating = True
End Sub

Sub BoLoc()
ActiveSheet.ShowAllData
End Sub
 
Sub Loc()
Dim Rng As Range
Application.ScreenUpdating = False
Range("R1:S1").Value = Range("M7").Value
>>> dòng lệnh này là gán giá trị tại ô M7 vào hai ô R1 và S1, để làm tiêu đề lọc cho Advance filter
Range("R2").Value = "="">=""&R[0]C[-5]" >>> R, C là hàng và cột, tính từ R2, đứng nguyên tại hàng 2 đó (vì =0), thụt lui cột về trước 5 ô, lấy giá trị tại đó ghép với ">=", tức lấy điều kiện Ngày tại ô ">=M2"
Range("S2").Value = "=""<=""&R[1]C[-6]" >>> R, C là hàng và cột, tính từ S2, xuống 1 hàng, thụt lui cột về trước 6 ô, lấy giá trị tại đó ghép với "<=", tức lấy điều kiện Ngày tại ô "<=M3"
Set Rng = Range("A7", Range("C7").End(xlDown)).Resize(, 16) >>> gán Vùng dữ liệu từ A7: P79 vào biến Vùng Rng (chọn 16 cột, và đến dòng 79, số này lấy theo thực tế của dòng có dữ liệu cuối hàng tại cột C, vì cột A của bạn khi có, khi rỗng)
Rng.Select >>> Chọn Vùng được gán.
Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("R1:S2") >>> R1:S2:-> R1:S1 chứa tiêu đề lọc, R2:S2 chứa điều kiện lọc cung cấp cho AdvanceFilter thực hiện yêu cầu lọc dữ liệu.
Range("R1:S2").ClearContents >>> Xóa nội dung R1:S2 đã được gán từ các lệnh trên cho bạn khỏi thấy rườm rà
Application.ScreenUpdating = True
End Sub


Sub BoLoc()
ActiveSheet.ShowAllData
End Sub


Thân
 
Lần chỉnh sửa cuối:
Sub Loc()
Dim Rng As Range
Application.ScreenUpdating = False
Range("R1:S1").Value = Range("M7").Value
>>> dòng lệnh này là gán giá trị tại ô M7 vào hai ô R1 và S1, để làm tiêu đề lọc cho Advance filter
Range("R2").Value = "="">=""&R[0]C[-5]" >>> R, C là hàng và cột, tính từ R2, đứng nguyên tại hàng 2 đó (vì =0), thụt lui cột về trước 5 ô, lấy giá trị tại đó ghép với ">=", tức lấy điều kiện Ngày tại ô ">=M2"
Range("S2").Value = "=""<=""&R[1]C[-6]" >>> R, C là hàng và cột, tính từ S2, xuống 1 hàng, thụt lui cột về trước 6 ô, lấy giá trị tại đó ghép với "<=", tức lấy điều kiện Ngày tại ô "<=M3"
Set Rng = Range("A7", Range("C7").End(xlDown)).Resize(, 16) >>> gán Vùng dữ liệu từ A7: P79 vào biến Vùng Rng (chọn 16 cột, và đến dòng 79, số này lấy theo thực tế của dòng có dữ liệu cuối hàng tại cột C, vì cột A của bạn khi có, khi rỗng)
Rng.Select >>> Chọn Vùng được gán.
Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("R1:S2") >>> R1:S2:-> R1:S1 chứa tiêu đề lọc, R2:S2 chứa điều kiện lọc cung cấp cho AdvanceFilter thực hiện yêu cầu lọc dữ liệu.
Range("R1:S2").ClearContents >>> Xóa nội dung R1:S2 đã được gán từ các lệnh trên cho bạn khỏi thấy rườm rà
Application.ScreenUpdating = True
End Sub


Sub BoLoc()
ActiveSheet.ShowAllData
End Sub


Thân
Cảm ơn bạn đã giải thích rất rõ ràng, nếu đoạn này
Range("R2").Value = "="">=""&R[0]C[-5]" >>> R, C là hàng và cột, tính từ R2, đứng nguyên tại hàng 2 đó (vì =0), thụt lui cột về trước 5 ô, lấy giá trị tại đó ghép với ">=", tức lấy điều kiện Ngày tại ô ">=M2"
Range("S2").Value = "=""<=""&R[1]C[-6]" >>> R, C là hàng và cột, tính từ S2, xuống 1 hàng, thụt lui cột về trước 6 ô, lấy giá trị tại đó ghép với "<=", tức lấy điều kiện Ngày tại ô "<=M3"
Có thể lấy chính xác ô M3 luôn không hay nhất định phải lùi hàng lùi cột như trong đoạn code đó, theo mình hiểu có thể ko cần lùi mà lấy chính xác luôn ô điều kiện.
Mình đang mới mò mẫm VBA nên giúp mình nhé, cảm ơn bạn rất nhiều
 
Cảm ơn bạn đã giải thích rất rõ ràng, nếu đoạn này
Range("R2").Value = "="">=""&R[0]C[-5]" >>> R, C là hàng và cột, tính từ R2, đứng nguyên tại hàng 2 đó (vì =0), thụt lui cột về trước 5 ô, lấy giá trị tại đó ghép với ">=", tức lấy điều kiện Ngày tại ô ">=M2"
Range("S2").Value = "=""<=""&R[1]C[-6]" >>> R, C là hàng và cột, tính từ S2, xuống 1 hàng, thụt lui cột về trước 6 ô, lấy giá trị tại đó ghép với "<=", tức lấy điều kiện Ngày tại ô "<=M3"
Có thể lấy chính xác ô M3 luôn không hay nhất định phải lùi hàng lùi cột như trong đoạn code đó, theo mình hiểu có thể ko cần lùi mà lấy chính xác luôn ô điều kiện.
Mình đang mới mò mẫm VBA nên giúp mình nhé, cảm ơn bạn rất nhiều
Code sẽ tạo 1 bảng điều kiện tại R1:S2 dựa trên vùng M2:M3 để từ đó áp dụng advanced filter.
Như mình đã nói ở trên, bạn làm thủ công advanced filter đã. Làm được, ra kết quả rồi từ đó mới record vba hoặc tham khảo các code sẵn có để hiểu code làm gì.
Gợi ý bạn 1 cách: Nhấn Alt F11, tìm đến dòng Range("R1:S2").ClearContents thêm dấu nháy đơn (') phía trước để dòng lệnh trở thành dòng comment. Nhấn F5 chạy code và xem vùng R1:S2
 
Có thể lấy chính xác ô M3 luôn không hay nhất định phải lùi hàng lùi cột như trong đoạn code đó, theo mình hiểu có thể ko cần lùi mà lấy chính xác luôn ô điều kiện.
Được chứ!
Bạn có thể thay câu lệnh:
  • Range("R2").Value = "="">=""&R[0]C[-5]"
  • Range("S2").Value = "=""<=""&R[1]C[-6]"
Bằng:
  • Range("R2").Value = ">=" & [M2] * 1
  • Range("S2").Value = "<=" & [M3] * 1
Hoặc:
  • [R2] = ">=" & [M2] * 1
  • [S2] = "<=" & [M3] * 1
Xóa dùm tôi câu: Rng.Select hơi thừa, do tôi lúc tìm hiểu có gắn vào để xem mà quên xóa nó đi.

Thân.
 

File đính kèm

  • mau.xlsb
    179.9 KB · Đọc: 21
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom