Hỏi về năm sinh không có ngày tháng ?

Liên hệ QC

tam8678

Đời Xá Chi
Tham gia
30/4/09
Bài viết
417
Được thích
301
Nghề nghiệp
Kế toán
Rất mong các anh em trên GPE xem và hướng dẩn giúp xử lý trong trường hợp năm sinh không có ngày tháng.
Yêu cầu cụ thể trong file đính kèm.
Xin được cám ơn trước
 

File đính kèm

Trường hợp này mình gặp cũng nhiều!

Cách làm:

Lấy các ngày đại lễ của dân tộc mà gán vô cho nhân vật ấy;

Nếu bạn ấy thích mùa thu thì sinh vào 2/9;

Nếu là hè thì 30/04 hay 01/05 hoặc 19/05;

Nếu là phụ nữ thì lấy ngày 08/03 hay 20/10 mà áp vô;

. . . . .

Nếu có ai vặn vẹo thì chỉ vô giấy chứng minh nhân dân, hay . . . mà chạy tội của mình, dễ mà! --=0 :-= --=0
 
Upvote 0
Rất mong các anh em trên GPE xem và hướng dẩn giúp xử lý trong trường hợp năm sinh không có ngày tháng.
Yêu cầu cụ thể trong file đính kèm.
Xin được cám ơn trước

Dùng code sau :

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    For Each Cll In Target
        If Cll = "" Then
            Cll.Offset(, 1) = ""
        ElseIf Len(Cll) = 4 Then
            Cll.NumberFormat = "0000"
            Cll.Offset(, 1).FormulaR1C1 = "=DATE(RC[-1],1,1)"
        Else
            Cll.NumberFormat = "dd/mm/yyyy"
            Cll.Offset(, 1).FormulaR1C1 = "=RC[-1]"
        End If
    Next Cll
End Sub
Bạn chú ý thao tác :
1. Chọn toàn bộ cột B rồi định dạng là General.
2. Paste dữ liệu vào cột B --> công thức cột C sẽ tự động điền vào.

Mình đã Test thử, code chỉ đúng khi năm sinh >=1900, không hiểu tại sao???+-+-+-++-+-+-++-+-+-+
 

File đính kèm

Upvote 0
Mừng ngày sinh nhật

Cách làm:

Lấy các ngày đại lễ của dân tộc mà gán vô cho nhân vật ấy;

Nếu bạn ấy thích mùa thu thì sinh vào 2/9;

Nếu là hè thì 30/04 hay 01/05 hoặc 19/05;

Nếu là phụ nữ thì lấy ngày 08/03 hay 20/10 mà áp vô;

. . . . .

Nếu có ai vặn vẹo thì chỉ vô giấy chứng minh nhân dân, hay . . . mà chạy tội của mình, dễ mà! --=0 :-= --=0
---

Cám ơn anh SA_DQ
Nhưng mà em đang phân vân là không biết nên đưa vào các ngày nào : ngày 30/2 hoặc 31/4 ( khỏi phải mừng ngày sinh nhật anh ơi.....đở hao ) :-= :-= :-=
 
Upvote 0
Thêm một tham khảo

PHP:
Option Explicit
Function ConvertYear(Dat As Variant) As Date
 If IsNumeric(Dat) Then Dat = DateSerial(Dat, 1, 1)
 ConvertYear = Format(Dat, "DD/MM/YYYY")
End Function

A|B|C|D|
HoTen | NgaySinh | Date |(Cú pháp tại ô bên trái)|
Nguyễn Việt Hồng |01/07/1948 |1/07/1948 |=ConVertYear(B3) |
Lê Thị Thơm|1973|1/01/1973|=ConVertYear(B4)|
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ giải thích???

Mọi người giải thích giùm mình cái này, không hiểu sao code của mình chỉ đúng khi năm sinh >=1900, còn năm sinh <1900 thì sai. Về mặt lý thuyết, mình không hiểu code sai chỗ nào???+-+-+-++-+-+-++-+-+-+

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    For Each Cll In Target
        If Cll = "" Then
            Cll.Offset(, 1) = ""
        ElseIf Len(Cll) = 4 Then
            Cll.NumberFormat = "0000"
            Cll.Offset(, 1).FormulaR1C1 = "=DATE(RC[-1],1,1)"
        Else
            Cll.NumberFormat = "dd/mm/yyyy"
            Cll.Offset(, 1).FormulaR1C1 = "=RC[-1]"
        End If
    Next Cll
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ngày tháng là định dạng của số
Excel coi ngày 1-1-1900 là số 1.
Nếu A1 chứa 1-1-1900, A2 = A1 - 1 thì được KQ 1-0-1900 hoặc 0-1-1900 tùy định dang.
thực chất A2 chứa số 0

Và Excel không định dạng ngày tháng với số âm.
Vì vậy năm trước ngày đó được thể hiện thành #######
 
Upvote 0
Hic, mình có trừ 1 chỗ nào đâu bạn, làm sao ra số âm được.
 
Upvote 0
Mọi người giải thích giùm mình cái này, không hiểu sao code của mình chỉ đúng khi năm sinh >=1900, còn năm sinh <1900 thì sai. Về mặt lý thuyết, mình không hiểu code sai chỗ nào???+-+-+-++-+-+-++-+-+-+
Đơn giản vì Excel nó chỉ "chơi" với ngày tháng có thời điểm > 1/1/1900 mà thôi ---> Những ngày trước đó nó không biết
Không tin bạn thử gõ ngày tháng năm sinh của Bác Hồ vào 1 cell nào đó xem
 
Upvote 0
Rất mong các anh em trên GPE xem và hướng dẩn giúp xử lý trong trường hợp năm sinh không có ngày tháng.
Yêu cầu cụ thể trong file đính kèm.
Xin được cám ơn trước
Bạn thử 2 công thức này thử xem sao:
Công thức 1, trả về ngày tháng năm sinh, nếu chỉ có ngày sinh thì lấy ngày 1 tháng 1 năm đó:
Mã:
=IF(B3<2010,DATE(B3,1,1),B3)
Công thức 2, trả về ngày tháng năm sinh, nếu không có ngày sinh thì trả về năm sinh. Kết quả ngày sinh dạng Text:
Mã:
=IF(B3<2010,B3,TEXT(B3,"dd/mm/yyyy"))
 
Upvote 0
Dùng code sau :

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    For Each Cll In Target
        If Cll = "" Then
            Cll.Offset(, 1) = ""
        ElseIf Len(Cll) = 4 Then
            Cll.NumberFormat = "0000"
            Cll.Offset(, 1).FormulaR1C1 = "=DATE(RC[-1],1,1)"
        Else
            Cll.NumberFormat = "dd/mm/yyyy"
            Cll.Offset(, 1).FormulaR1C1 = "=RC[-1]"
        End If
    Next Cll
End Sub
Bạn chú ý thao tác :
1. Chọn toàn bộ cột B rồi định dạng là General.
2. Paste dữ liệu vào cột B --> công thức cột C sẽ tự động điền vào.

Mình đã Test thử, code chỉ đúng khi năm sinh >=1900, không hiểu tại sao???+-+-+-++-+-+-++-+-+-+
---
Nhưng mà bạn ptlong04x1 cho tôi hỏi thêm vấn đề mới phát sinh thì sửa code như thế nào ?
- Vd:1990 => 01/01/1990 kết quả sửa lại : _/_/1990 (gạch thấp/,gạch thấp/,năm sinh)
( ý tôi là có sao để vậy )

Thân chào :-=
 
Upvote 0
Sao không dùng công thức 1 lần mà phải dùng code rồi duyệt qua từng cell nhỉ. Tôi nghĩ dữ liệu chắc không có ai sinh năm 1905 nên có thể dựa vào cái này để làm công thức. Nếu B3>2009 thì =B3 còn lại thì "_/_/"&B3.
Mã:
=IF(B3>2009,B3,"_/_/"&B3)
 
Upvote 0
---
Nhưng mà bạn ptlong04x1 cho tôi hỏi thêm vấn đề mới phát sinh thì sửa code như thế nào ?
- Vd:1990 => 01/01/1990 kết quả sửa lại : _/_/1990 (gạch thấp/,gạch thấp/,năm sinh)
( ý tôi là có sao để vậy )

Thân chào :-=

Anh paste lại đoạn code này nhé, như trên các bạn cũng đưa ra nhiều cách rồi, tuỳ anh thấy cách nào tiện lợi thì sử dụng.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    For Each Cll In Target
        If Cll = "" Then
            Cll.Offset(, 1) = ""
        ElseIf Len(Cll) = 4 Then
            Cll.NumberFormat = "0000"
            Cll.Offset(, 1) = "_/_/" & Cll
        Else
            Cll.NumberFormat = "dd/mm/yyyy"
            Cll.Offset(, 1).FormulaR1C1 = "=RC[-1]"
        End If
    Next Cll
End Sub
 
Upvote 0
Anh paste lại đoạn code này nhé, như trên các bạn cũng đưa ra nhiều cách rồi, tuỳ anh thấy cách nào tiện lợi thì sử dụng.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    For Each Cll In Target
        If Cll = "" Then
            Cll.Offset(, 1) = ""
        ElseIf Len(Cll) = 4 Then
            Cll.NumberFormat = "0000"
            Cll.Offset(, 1) = "_/_/" & Cll
        Else
            Cll.NumberFormat = "dd/mm/yyyy"
            Cll.Offset(, 1).FormulaR1C1 = "=RC[-1]"
        End If
    Next Cll
End Sub
Hình như có gì đó chưa ổn ---> Bạn thử Format cell B4 theo dạng "dd/mm/yyyy" sau đó gõ vào số 1990 xem C4 nó ra cái gì?
Nói chung làm việc với DATE không phải chuyện dể ---> Dùng WorkSheet_Change rất dể bị "sa bẫy" ---> Tôi ủng hộ cách dùng Sub hơn
 
Upvote 0
Hình như có gì đó chưa ổn ---> Bạn thử Format cell B4 theo dạng "dd/mm/yyyy" sau đó gõ vào số 1990 xem C4 nó ra cái gì?
Nói chung làm việc với DATE không phải chuyện dể ---> Dùng WorkSheet_Change rất dể bị "sa bẫy" ---> Tôi ủng hộ cách dùng Sub hơn
---
Bạn ptlong04x1 có nhắc nhở chú ơi:

Bạn chú ý thao tác :
1. Chọn toàn bộ cột B rồi định dạng là General.

Nếu chuyển về định dạng "dd/mm/yyyy" thì nó trật chứ sao :-= :-= :-=
Code này nó "ngộ ngộ" thế nào ấy? nhờ chú xem và giải thích :
- Nhập 1890 => _/_/1890 :-= :-=
- Nhập 0000 => 00/01/1900

Còn về dùng sub thì ...anh không biết :-=
 
Upvote 0
---
Bạn ptlong04x1 có nhắc nhở chú ơi:



Nếu chuyển về định dạng "dd/mm/yyyy" thì nó trật chứ sao :-= :-= :-=
Code này nó "ngộ ngộ" thế nào ấy? nhờ chú xem và giải thích :
- Nhập 1890 => _/_/1890 :-= :-=
- Nhập 0000 => 00/01/1900

Còn về dùng sub thì ...anh không biết :-=
Chính vì vậy em mới bảo rằng WorkSheet_Change rất mệt mỏi ---> Sao anh chắc được rằng anh đã Format toàn bộ là General
Dùng Sub có nghĩa là: Anh nhập cái gì thì cứ việc nhập thoải mái, sau khi xong việc, anh bấm nút 1 nhát nó sẽ chỉnh lại dử liệu theo đúng yêu cầu cho anh!
Theo kinh nghiệm thì em cho rằng dùng Sub cho kết quả chính xác hơn là WorkSheet_Change (nhập đến đâu chỉnh đến nấy)
Cái khó khăn khi viết code là: Làm sao nhận biết được 1 cell là DATE thật sự ---> Vì DATE thật sự nhưng đang được Format General thì nó vẫn là DATE thôi
 
Lần chỉnh sửa cuối:
Upvote 0
Chính vì vậy em mới bảo rằng WorkSheet_Change rất mệt mỏi ---> Sao anh chắc được rằng anh đã Format toàn bộ là General
Dùng Sub có nghĩa là: Anh nhập cái gì thì cứ việc nhập thoải mái, sau khi xong việc, anh bấm nút 1 nhát nó sẽ chỉnh lại dử liệu theo đúng yêu cầu cho anh!
Theo kinh nghiệm thì em cho rằng dùng Sub cho kết quả chính xác hơn là WorkSheet_Change (nhập đến đâu chỉnh đến nấy)
Cái khó khăn khi viết code là: Làm sao nhận biết được 1 cell là DATE thật sự ---> Vì DATE thật sự nhưng đang được Format General thì nó vẫn là DATE thôi
---
Nguyên nhân 1 phần do anh chủ quan, khi làm lý lịch trích ngang cho công nhân đã kiểm soát khâu nhập liệu phần ngày tháng năm sinh theo đúng định dạng dd/mm/yyyy, đâu có nghĩ rằng lại có trường hợp không có ngày tháng => người nhập liệu vô tư chuyển thành General để nhập năm sinh => Kết quả cột này : TỔNG HỢP CÁC LOẠI ĐỊNH DẠNG ( vì thế anh mới nghĩ ra cột phụ là thế, mong chú cảm thông chứ anh khắt khe khâu nhập liệu để làm gì ? !$@!! )
 
Upvote 0
---
Nguyên nhân 1 phần do anh chủ quan, khi làm lý lịch trích ngang cho công nhân đã kiểm soát khâu nhập liệu phần ngày tháng năm sinh theo đúng định dạng dd/mm/yyyy, đâu có nghĩ rằng lại có trường hợp không có ngày tháng => người nhập liệu vô tư chuyển thành General để nhập năm sinh => Kết quả cột này : TỔNG HỢP CÁC LOẠI ĐỊNH DẠNG ( vì thế anh mới nghĩ ra cột phụ là thế, mong chú cảm thông chứ anh khắt khe khâu nhập liệu để làm gì ? !$@!! )
Vâng! Em hiểu! Và em cũng đang tìm cách nào đó hoàn hảo nhất cho anh đây
Dù sao mọi người vẫn đang trợ giúp cho anh ---> Hãy chờ xem!
Hướng của em là dùng Sub ---> Với dử liệu anh đang có sẳn (tức là người ta đã lở nhập tùm lum) anh nhấn nút 1 nhát thì code chạy và chuyển toàn bộ theo đúng ý anh
 
Upvote 0
Web KT

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

Back
Top Bottom