Hỏi về cách lọc dữ liệu ngày sinh nhật

Liên hệ QC

Nguyen Huu Quan

Thành viên mới
Tham gia
15/4/09
Bài viết
6
Được thích
0
Mình có file dữ liệu gồm 2 sheet là ngày sinh của công nhân viên trong Cty và ngày sinh của con công nhân viên .

Nay muốn tạo 1 sheet chi tiền quà sinh nhật mà cứ click vào ô ngày sinh ngày nào đó thì sẽ có danh sách những người sinh ngày đó (nếu là con của công nhân viên thì hiện cả tên, mã số bố hoặc mẹ)như "Bang TT" mà không cần phải dùng chức năng fỉlte, copy and paste.

Nhờ mọi người chỉ giúp.
 

File đính kèm

  • DS NGAY SINH.xls
    26 KB · Đọc: 54
Mình có file dữ liệu gồm 2 sheet là ngày sinh của công nhân viên trong Cty và ngày sinh của con công nhân viên .

Nay muốn tạo 1 sheet chi tiền quà sinh nhật mà cứ click vào ô ngày sinh ngày nào đó thì sẽ có danh sách những người sinh ngày đó (nếu là con của công nhân viên thì hiện cả tên, mã số bố hoặc mẹ)như "Bang TT" mà không cần phải dùng chức năng fỉlte, copy and paste.

Nhờ mọi người chỉ giúp.

Tôi vẫn không hiểu ý của bạn, nhưng theo ý tôi, hoặc là bảng tên của CHA, MẸ click vào thì cho ra chi tiết CON, hoặc ngược lại. Chứ ngày tháng năm đôi khi lại trùng nhau làm sao mà phân biệt?
 
Cách sử dụng: Bạn chọn 1 trong các ngày gần đến tại 'L2' của trang 'Bang TT"


PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [L2]) Is Nothing Then
   Dim MaSN As String
   Dim Sh As Worksheet, Clls As Range, dRng As Range
   
   Set Sh = Sheets("DS CN"):              MaSN = MaNgay(Target.Value)
   Range("B7:J14").ClearContents
   For Each Clls In Sh.Range("G4:G" & Sh.[B65500].End(xlUp).Row)
      If MaNgay(Clls.Value) = MaSN Then
         With [b14].End(xlUp)
            Clls.Offset(, -5).Resize(, 3).Copy Destination:=.Offset(1)
            .Offset(1, 3).Value = Clls.Offset(, -1).Value
            .Offset(1, 4).Value = Clls.Offset(, -2).Value
            .Offset(1, 7).Value = Clls.Value
            .Offset(1, 8).Value = 100000
         End With
      End If
   Next Clls
   Set Sh = Sheets("DS CON"):
   For Each Clls In Sh.Range("K4:K" & Sh.[B65500].End(xlUp).Row)
      If MaNgay(Clls.Value) = MaSN Then
         With [b14].End(xlUp)
            Clls.Offset(, -9).Resize(, 3).Copy Destination:=.Offset(1)
            
            .Offset(1, 3).Value = Clls.Offset(, -5).Value 'X'
            .Offset(1, 4).Value = Clls.Offset(, -6).Value
            
            Clls.Offset(, -2).Resize(, 3).Copy Destination:=.Offset(1, 5)
            .Offset(1, 8).Value = 100000
         End With
      End If
   Next Clls
 End If
End Sub


Mã:
[B]Function MaNgay(Dat As Date) As String[/B]
 Const StrC As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
 MaNgay = Mid(StrC, Month(Dat), 1) & Mid(StrC, Day(Dat), 1)
[B]End Function[/B]
 

File đính kèm

  • GPE.rar
    16.8 KB · Đọc: 71
Dùng các hàm cơ sở dữ liệu đi bạn & lần sau chớ chen ngang nha!


Mình chỉ gơi í 1 công thức thôi nha:

(*) Thêm cột phụ: Tại [J5] ta nhập 'Thang'
Tại ô ngay dưới nó ta nhập công thức =Month(D6)
Ta dùng phương cách copy để các ô phía dưới nó cũng có công thức tương tự.
(*) Chép 'J5:J6' tới 'L5:L6'
(*) Tại 'I19' ta nhập công thức: =DSUM(A5:J15,I5,L5:L6)

(Vì là bài tập, nên bạn tiếp tục nha; Hãy ngâm cứu kỹ DSUM() & DCOUNT() để đạt thành công tiếp theo --=0 :-= --=0
 
Tôi vẫn không hiểu ý của bạn, nhưng theo ý tôi, hoặc là bảng tên của CHA, MẸ click vào thì cho ra chi tiết CON, hoặc ngược lại. Chứ ngày tháng năm đôi khi lại trùng nhau làm sao mà phân biệt?

Oh, ý của mình là: Ở Sheet "Bang TT" tạo 1 combo box, khi click vào ngày nào đó thì sẽ có 1 bảng tất cả những người sinh ngày đó của 2 sheet kia.
 
Cách sử dụng: Bạn chọn 1 trong các ngày gần đến tại 'L2' của trang 'Bang TT"


PHP:
Option Explicit
 
Cám ơn SA_DQ nhiều lắm. Mình dùng file của bạn rất tốt, nhưng có điều hỏi bạn là : theo file của bạn trong combo box chỉ đến ngày 06/08/2009 là hết làm cách nào để có những những ngày sau đó nữa. Thực sự mình ko hiểu gì về PHP Code cả.
 
Cách sử dụng: Bạn chọn 1 trong các ngày gần đến tại 'L2' của trang 'Bang TT"


PHP:
Option Explicit
 
Cám ơn SA_DQ nhiều lắm. Mình dùng file của bạn rất tốt, nhưng có điều hỏi bạn là : theo file của bạn trong combo box chỉ đến ngày 06/08/2009 là hết làm cách nào để có những những ngày sau đó nữa. Thực sự mình ko hiểu gì về PHP Code cả.[/QUOTE]
Bạn vào Sh DS CN tại J2:J9 và thêm vào. sau đó nhấn Ctr F3 sẽ thấy 1 name NgaySN và bạn sửa lại thêm.

Bác Sa ơi, cho em hỏi MaNgay này có duy nhất chưa. Hay quá mà em chưa test.

[PHP]Function MaNgay(Dat As Date) As String
 Const StrC As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
 MaNgay = Mid(StrC, Month(Dat), 1) & Mid(StrC, Day(Dat), 1)
End Function
 
Lần chỉnh sửa cuối:
Cách sử dụng:[/I][/U][/B] Bạn chọn 1 trong các ngày gần đến tại 'L2' của trang 'Bang TT"
Nhưng có điều hỏi bạn là : theo file của bạn trong combo box chỉ đến ngày 06/08/2009 là hết làm cách nào để có những những ngày sau đó nữa. Thực sự mình ko hiểu gì về PHP Code cả.

Bạn chưa xét đến danh sách gốc của nó; Danh sách gốc nằm tại trang tính 'DS CN' thuộc vùng J2:J9 như bảng sau:
|J|
1|Ngay|
2|=A4 + TODAY()|
3|=A5 + TODAY()|
4|=A6 + TODAY()|
5|=A7 + TODAY()|
6|=A8 + TODAY()|
7|=A9 + TODAY()|
8|=A10 + TODAY()|
9|=A11 + TODAY()|

Bạn thấy đủ dùng cho bạn suốt cuộc đời luôn đó! Khà, khà, . . .


Bác Sa ơi, cho em hỏi MaNgay này có duy nhất chưa. Hay quá mà em chưa test.

(*) Nó là duy nhứt trong năm;
(*) Để tìm kiếm ngày sinh nhựt thôi;
Nếu muốn phân biệt năm này với năm kia thì thêm 1 ký tự hay ký số vô;
Khi ấy sẽ có cách biểu diễn tất thẩy các ngày trong hơn 1 thế kỹ khác nhau luôn!
(Tất nhiên phải có mánh lới 1 chút chổ này: Ta có 36 ký tự & là bội số của 12 - Số thàng trong năm)

Gợi ý cho ThuNghi luôn:

12 ký tự đầu biểu thị cho các tháng của năm thỏa điều kiện Year(Date) Mod 3 = 0
12 ký tự tiếp sau đó - cho các tháng của năm thỏa điều kiện Year(Date) Mod 3 = 1
12 ký tự cuối của thỏa điều kiện Year(Date) Mod 3 = 2

Cụ thể Ví dụ hàm MaNTN(#1/15/2009#) trả về 0EL (Số 0 biểu thị cho tháng 1)
Thì MaNTN(#1/15/2010#) sẽ là: CEM (C cũng biểu thị cho tháng 1 nhưng năm lớn hơn 1 đơn vị);
& MaNTN(#1/15/2011#) là OEN

Hàm này rất linh thiên khi CSDL phải nhập nhiều trường chứa ngày, như [NgayCT], [NgayMua], NgayTra],. . .

Chúc vui!
 
Lần chỉnh sửa cuối:
Có pác nào chỉ em voi, em có một việc càn đến cách tính cộng thời gian mà em chưa biết cách.
ví dụ em có một hàng dang la 14:12, em muốn hàng thứ 2 là 14:15 dùng công thức cộng thời gian để cộng ở hàng thứ 2 là 3 phút nữa hay cộng với bất kỳ thời gian nào.
14:1214:15
 
Có pác nào chỉ em voi, em có một việc càn đến cách tính cộng thời gian mà em chưa biết cách.
ví dụ em có một hàng dang la 14:12, em muốn hàng thứ 2 là 14:15 dùng công thức cộng thời gian để cộng ở hàng thứ 2 là 3 phút nữa hay cộng với bất kỳ thời gian nào.
14:1214:15

Nếu A1 là 14:02
Muốn A2 là 14:05 (cộng thêm 3 phút). Ở cell A2, bạn gõ: =text(A1+text(3/24/60,"h:mm"),"h:mm")

(Nhưng lưu ý là định dạng kết quả lúc này sẽ là text đấy nhé)
 
Web KT
Back
Top Bottom