Trợ giúp về lọc dữ liệu ngày sinh

Liên hệ QC

dqt_nt

Thành viên hoạt động
Tham gia
7/6/08
Bài viết
100
Được thích
29
Mình có 1 sheet tổng quát chứa các thông tin về nhân sự. Mình muốn tạo thêm 1 sheet để lọc những người có ngày sinh nhật trong 1 tháng nào đó. Tạo 1 sheet để lọc những người ở 1 địa phương nào đó.
Ví dụ:
Ông Nguyễn Văn A ở Phường Cam Phúc Nam, Cam Ranh, Khánh Hòa

Khi mình gõ là Cam Phúc Nam thì hiện ông Nguyễn Văn A
Gõ Cam Ranh, hay gõ Khánh Hòa cũng hiện ông A

Yêu cầu của mình là như vậy, mong mọi người giúp! Nếu có thể hướng dẫn cụ thể luôn để mình có thể tự làm khi lọc nhân sự theo phòng, ban và các tiêu chí khác
Cảm ơn mọi người
 

File đính kèm

  • Baitoan.rar
    183.5 KB · Đọc: 154
Một cách dùng Công thức! Bạn tham khảo! Có thể chuyển thành VBA để chạy nhanh hơn!
 

File đính kèm

  • Baitoan.rar
    274 KB · Đọc: 182
Dùng VBA thì mình có cách này. Bạn mở file ra xem nha! Thân.
 

File đính kèm

  • Baitoan.rar
    203.1 KB · Đọc: 155
Lần chỉnh sửa cuối:
Làm những bài toán có liên quan đến ngày tháng thì trước khi làm phải kiểm tra kỹ phần nhập liệu ngày tháng... xem liệu chúng có thật sự là ngày tháng hay không!
File của tác giã có 1 vài chổ là dạng TEXT... khi đưa vào máy tính có định dạng trong Regional Language Settings là m/d/yyyy thì sẽ cho lổi #VALUE!
Xem lại nhé (dùng hàm ISNUMBER hoặc ISTEXT để kiểm tra)
Còn bài của Po_Pikachu: Tôi không hiểu tại sao lại phải dùng For, trong khi ta hoàn toàn có thể dùng AutoFilter (làm bằng tay tôi còn làm được nữa là...)
---------
Nói thêm với tác giã: Nếu tôi là giám đốc, chắc chắn tôi không bao giờ chấp nhận 1 bảng tính trình bày lượm thượm như kiểu của bạn... Xấu quá ---> Trong khi dử liệu này rất bình thường, đâu đến nổi không thể trình bày gọn gàng
???
 
Lần chỉnh sửa cuối:
Vui lòng xem file đính kèm
 

File đính kèm

  • Baitoan ngay sinh.rar
    204.6 KB · Đọc: 150
Lần chỉnh sửa cuối:
@solomon2211: Bạn viết lộn 1 dòng rồi. Phải là:
PHP:
.Cells(4 + j, 4).Value = Worksheets("HO SO").Cells(i, 24).Value
Thay vì như vầy:
PHP:
.Cells(4 + j, 4).Value = Worksheets("HO SO").Cells(i, 7).Value
Vì là cột Phòng ban phân xưởng mà! Chứ có phải cột đâu địa chỉ. Còn vấn đề thời gian sai thì mình cũng đã chỉnh lại rồi. Bạn lên topic #3 tải lại nha! Thân.
 
Lần chỉnh sửa cuối:
Bài này mà dùng Autofliter với specialcells là bảo đảm chớp mắt! Anh ndu làm giúp em một đoạn code dùng Specialcells với! Tham số của Specialcells em quên hoài! Sẵn ôn lại anh nhé! (5 chai ken)
 
Làm những bài toán có liên quan đến ngày tháng thì trước khi làm phải kiểm tra kỹ phần nhập liệu ngày tháng... xem liệu chúng có thật sự là ngày tháng hay không!
File của tác giã có 1 vài chổ là dạng TEXT... khi đưa vào máy tính có định dạng trong Regional Language Settings là m/d/yyyy thì sẽ cho lổi #VALUE!
Xem lại nhé (dùng hàm ISNUMBER hoặc ISTEXT để kiểm tra)
Còn bài của Po_Pikachu: Tôi không hiểu tại sao lại phải dùng For, trong khi ta hoàn toàn có thể dùng AutoFilter (làm bằng tay tôi còn làm được nữa là...)
---------
Nói thêm với tác giã: Nếu tôi là giám đốc, chắc chắn tôi không bao giờ chấp nhận 1 bảng tính trình bày lượm thượm như kiểu của bạn... Xấu quá ---> Trong khi dử liệu này rất bình thường, đâu đến nổi không thể trình bày gọn gàng
???
Thank bạn đã nhắc nhở. May mà bạn không phải là giám đốc :-=, không thì tôi đã bị đuổi việc rồi.
Nói thêm, tôi là kỹ sư cơ khí và không hề phụ trách về nhân sự, cái này là tôi đang học hỏi để giúp cho 1 chị cùng cơ quan có thể quản lý dễ dàng trong khi chờ đợi sếp duyệt 1 phần mềm quản lý chuyennghiêpc.

Sẳn đây các bạn cho hỏi luôn là: Có thể dùng excel để quản lý nhân sự một cách chuyên nghiệp không?

Thank all!

Một cách dùng Công thức! Bạn tham khảo! Có thể chuyển thành VBA để chạy nhanh hơn!

Bạn đã giúp đúng ý của tôi. Khi đang còn lơ mơ thế này thì tốt nhất nên dùng công thức chứ VBA thì tôi chịu. Cảm ơn sự nhanh nhẹn và nhiệt tình của bạn. Đúng như ý!!!--=0
 
Chỉnh sửa lần cuối bởi điều hành viên:
Làm thử cho bạn 1 sheet lọc ngày SN... sheet còn lại tương tự:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  Application.ScreenUpdating = False
  If Target.Address = "$A$2" Then
    Range("A4").CurrentRegion.Offset(1).ClearContents
    Sheets("Hoso").AutoFilterMode = False
    With Sheets("Hoso").Range("A1").CurrentRegion
       .Offset(, 3).Resize(, 1).NumberFormat = "mmm"
       .AutoFilter 4, Choose(Target, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
       Union(.Offset(1, 2).Resize(, 1), .Offset(1, 22).Resize(, 2)).SpecialCells(12).Copy
       Range("B5").PasteSpecial 3: Sheets("Hoso").AutoFilterMode = False
       .Offset(, 3).Resize(, 1).NumberFormat = "dd/mm/yyyy"
    End With
    Range("A4").CurrentRegion.Resize(, 1).SpecialCells(4).Value = Evaluate("=ROW($1:$1000)")
    Target.Select
  End If
End Sub
Như tôi đã nói là dùng AutoFilter sẽ nhanh hơn! Các bạn tham khảo nhé!
Thêm nữa:
- Tôi đã sửa lại phần ngày tháng cho chuẩn với định dạng DATE
- Sửa lại font, size cùng cách bố trí dử liệu cho gọn gàng hơn
(nhìn dử liệu củ gớm quá)
 

File đính kèm

  • Loc_SN_01.rar
    145.8 KB · Đọc: 207
Hãy giúp tôi lập danh sách theo quý & ngày sinh tăng dần

Cơ quan tôi, cứ đến ngày sinh được tặng quà & cành bông tươi;
Vậy các bạn lập giúp danh sách sinh nhật 4 quý; nhưng được xếp theo thứ tự tăng dần trong tháng.
Rất mong các bạn giúp đỡ!

Xin cảm ơn trước & chúc xuân vui vẽ!
 
Cơ quan tôi, cứ đến ngày sinh được tặng quà & cành bông tươi;
Vậy các bạn lập giúp danh sách sinh nhật 4 quý; nhưng được xếp theo thứ tự tăng dần trong tháng.
Rất mong các bạn giúp đỡ!

Xin cảm ơn trước & chúc xuân vui vẽ!

Cái này mình nghĩ dùng lọc rồi Sort cho nhanh bạn à.
 
Cơ quan tôi, cứ đến ngày sinh được tặng quà & cành bông tươi;
Vậy các bạn lập giúp danh sách sinh nhật 4 quý; nhưng được xếp theo thứ tự tăng dần trong tháng.
Rất mong các bạn giúp đỡ!

Xin cảm ơn trước & chúc xuân vui vẽ!

Vấn đề của bạn ở đây là từ ngày sinh tính ra quý thôi! Còn việc còn lại là Sort theo ngày sinh và Dùng Pivotable lấy ra với Page là cột [Quý], Cái này không cần code gì cả!

Công thức tính quý như sau (nhiều cách lắm, đây là 1 trong nhiều cách đó):
PHP:
Giả sử A1 là ngày - định dạng dd/mm/yyyy, 
B1 sẽ trả về giá trị là quý thứ mấy trong năm của ngày tại A1:

B1 = INT((month(A1)-1)/3)+1
 
Cơ quan tôi, cứ đến ngày sinh được tặng quà & cành bông tươi;
Vậy các bạn lập giúp danh sách sinh nhật 4 quý; nhưng được xếp theo thứ tự tăng dần trong tháng.
Rất mong các bạn giúp đỡ!

Xin cảm ơn trước & chúc xuân vui vẽ!
Excel có chức năng Sort theo THÁNG, theo ngày trong TUẦN... còn sort theo NGÀY TRONG THÁNG thì hình như hỏng có ---> Hơi bị tê... các cao thủ khác có ý kiến gì không (cách làm đương nhiên là có ---> Bùn lắm thì tôi tạo 1 cột phụ ---> Nhưng quan trọng là cách nào nhanh nhất thôi)
 
Excel có chức năng Sort theo THÁNG, theo ngày trong TUẦN... còn sort theo NGÀY TRONG THÁNG thì hình như hỏng có ---> Hơi bị tê... các cao thủ khác có ý kiến gì không (cách làm đương nhiên là có ---> Bùn lắm thì tôi tạo 1 cột phụ ---> Nhưng quan trọng là cách nào nhanh nhất thôi)
Anh ndu96081631 ơi! Sort theo ngày thì hiển nhiên là kiêm luôn sort theo ngày trong tháng rồi còn gì ? Ẹc Ẹc...

Nghĩa là em đem cái cột ngày ra làm tiêu chí Sort, thì dĩ nhiên nếu sort theo tiêu chí từ nhỏ đến lớn thì ngày nhỏ ở trên, ngày lớn ở dưới! Xét trong 1 tháng đó thì cũng vẫn vậy! Ngày 01/01/2008 không thể nhỏ hơn ngày 02/01/2008 mà!

Bài này không có gì khó cả, chỉ cần 1 công thức tính ra quý từ ngày sinh, sau đó Pivotable là ra! anh chị nào có danh sách nhiều nhiều chút đưa lên em làm thử!

Em post bài ví dụ lên luôn đây! Sort theo cột Quý Sau đó theo cột Sort!
 

File đính kèm

  • Sort.rar
    97.1 KB · Đọc: 45
Lần chỉnh sửa cuối:
Anh ndu96081631 ơi! Sort theo ngày thì hiển nhiên là kiêm luôn sort theo ngày trong tháng rồi còn gì ? Ẹc Ẹc...
Chưa chắc à nha
Ví dụ: Có 3 người sinh vào các ngày: 15/01/1975... 14/01/1986... 13/01/1998
vậy tức 3 người này sinh cùng 1 tháng ---> Nếu dùng Sort thông thường thì em sinh ngày 15 sẽ đứng trước em sinh ngày 14 nhé (vì thực chất 15/01/1975<14/01/1986<13/01/1998)
Kiệt nghĩ sao về trường hợp này (tôi đang nói đến việc không dùng cột phụ à nha)
 
Chưa chắc à nha
Ví dụ: Có 3 người sinh vào các ngày: 15/01/1975... 14/01/1986... 13/01/1998
vậy tức 3 người này sinh cùng 1 tháng ---> Nếu dùng Sort thông thường thì em sinh ngày 15 sẽ đứng trước em sinh ngày 14 nhé (vì thực chất 15/01/1975<14/01/1986<13/01/1998)
Kiệt nghĩ sao về trường hợp này (tôi đang nói đến việc không dùng cột phụ à nha)

Em xin lỗi, em nhầm! muốn sort như vậy theo em làm cột phụ thì mới sort được!
 
Làm thử cho bạn 1 sheet lọc ngày SN... sheet còn lại tương tự:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
..........
       .Offset(, 3).Resize(, 1).NumberFormat = "mmm"
       .AutoFilter 4, Choose(Target, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
..........
End Sub
Như tôi đã nói là dùng AutoFilter sẽ nhanh hơn! Các bạn tham khảo nhé!
Thêm nữa:
- Tôi đã sửa lại phần ngày tháng cho chuẩn với định dạng DATE
- Sửa lại font, size cùng cách bố trí dử liệu cho gọn gàng hơn
(nhìn dử liệu củ gớm quá)

sao không là thế này cho nó gọn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
..........
       .Offset(, 3).Resize(, 1).NumberFormat = "m"
       .AutoFilter 4, Target
..........
End Sub

Mượn file của ndu, làm nốt yêu cầu lọc nơi ở (dùng AdvancedFilter)
 

File đính kèm

  • Loc_SN_02.rar
    147.6 KB · Đọc: 110
Lần chỉnh sửa cuối:
Excel có chức năng Sort theo THÁNG, theo ngày trong TUẦN... còn sort theo NGÀY TRONG THÁNG thì hình như hỏng có ---> Hơi bị tê... các cao thủ khác có ý kiến gì không (cách làm đương nhiên là có ---> Bùn lắm thì tôi tạo 1 cột phụ ---> Nhưng quan trọng là cách nào nhanh nhất thôi)
Vậy là trước tiên ta cứ lọc từng quý cái đã. (Để chỉ còn lại 1/4 số lượng trong DS)
Sau đó ta xử tiếp bằng cách nào đó tối ưu.

Xin cảm ơn các bạn đã cho đường hướng.

Trước đây mình xài hàm tự tạo để ra cột phụ như sau:
PHP:
Function ThangNgay (Optional Dat As Date) As String
 Const Chu As String ="0123456789ABCDEGHIKLMNOPQTUVXYZ"
 
 If Dat = 0 Then Dat = Date
 ThangNgay=Mid$(Chu, Month(Dat) + 11 , 1) &  Mid$(Chu, Day(Dat), 1)
 
End Function
Sau đó xếp DS quý theo cột phụ này
Nhưng sau khi gia nhập GPE.COM, mình nghĩ đó chưa chắc phải là cách tối ưu!

Chúc xuân vui vẽ! :-= @$@!^%
 
Lần chỉnh sửa cuối:
sao không là thế này cho nó gọn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
..........
       .Offset(, 3).Resize(, 1).NumberFormat = "m"
       .AutoFilter 4, Target
..........
End Sub
Mượn file của ndu, làm nốt yêu cầu lọc nơi ở (dùng AdvancedFilter)
Tôi thật không ngờ là có thể sort theo kiểu này... Cảm ơn Boyxin
Còn phần lọc nơi ở, tại sao không dùng AutoFilter luôn, khỏi cột phụ?
AutoFilter 7, "*" & Target & "*"
Chỉ cần chú ý thêm 1 chuyện là: Nếu LỌC không ra giá trị nào thì khỏi cần phải điền STT
 
Dùng Query

sao không là thế này cho nó gọn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
..........
       .Offset(, 3).Resize(, 1).NumberFormat = "m"
       .AutoFilter 4, Target
..........
End Sub

Mượn file của ndu, làm nốt yêu cầu lọc nơi ở (dùng AdvancedFilter)

Với bài này, nếu dùng Query thì kết quả thu được sẽ tốt hơn.
Đầu tiên, tôi copy sheet hoso vào một file mới (ở sheet1) và ghi thành file HoSo.
Sau đó từ sheet tạo danh sách, tôi dùng Query để lấy dữ liệu. Trong MS Query, sử dụng tham số (parameters) để chọn tháng. Sắp dữ liệu theo khóa month(SNhat)+day(SNhat) có thể sắp thêm cột Phòng và Đơn vị.
Trở về E, điều chỉnh tùy chọn tham số để tự cập nhật theo 1 validation (như của anh BoyXin đã làm) để chọn tháng.
Mã:
SELECT `Sheet1$`.HoTen, `Sheet1$`.SNhat, `Sheet1$`.DVi, `Sheet1$`.PXuong
FROM `E:\My Documents\HoSo`.`Sheet1$` `Sheet1$`
WHERE (month(SNhat)=?) AND (day(snhat)=?)
ORDER BY month(snhat)+day(snhat), `Sheet1$`.DVi, `Sheet1$`.PXuong
 
Web KT
Back
Top Bottom