AddIn convert ngày dương lịch sang âm lịch và ngược lại + đọc ngày tháng

Liên hệ QC

gaixixon

Thành viên mới
Tham gia
18/1/10
Bài viết
19
Được thích
21
Gửi tặng các bạn addin của Excel chuyển đổi ngày âm lịch sang dương lịch và ngược lại.
Các bước làm như sau:
1. Download file về và giải nén lấy file "amlich.xlam"
2. Mở excel lên (test với excel rồi cài Addin vào). (Bấm Files/Options/Addins/chọn tiếp Go/ chọn tiếp Browse/ chọn file "amlich.xlam" rồi bấm ok.

Cách dùng:
* Đổi ngày dương lịch ra âm lịch:
=amlich("ngày_cần_đổi") gõ ngày_cần_đổi theo dạng: mm/dd/yyyy. Nếu không có ngày_cần_đổi thì hàm mặc định là hôm nay.+-+-+-+
vd: =amlich("2/25"); =amlich("2/2/2015"); =amlich(); =amlich(b5)

* Đổi ngày âm ra ngày dương:
=duonglich("ngày_cần_đổi") bắt buộc phải gõ ngày cần đổi theo dạng "mm/dd/yyyy), có thể không cần gõ năm.-\\/.
ví dụ: =duonglich("5/5"); =duonglich("2/28/2015")

* Đọc ngày tháng:
=docngay("ngày_cần_đọc", option) - Option có thể là 0; 1; 2 hoặc không cần điền vào.
Opt1: Sẽ convert ngày_cần_đọc thành dạng "text" để có thể ghép với hàm concatenate! &&&%$R
vd: =concatenate("Hôm nay là ngày ", docngay(today()) => "Hôm nay là ngày 31 tháng 7 năm 2015" //**/
Opt1: Sẽ convert thành: Ngày xx tháng xx năm xxxx
Opt3: Sẽ convert thành: Thứ x, ngày xx tháng xx năm xxxx

Have fun.
P/s:
 

File đính kèm

  • amlich.0.1.zip
    44.9 KB · Đọc: 707
Lần chỉnh sửa cuối:
to gaixixon : định dạng mm/dd/yyyy có vẻ ngược lại với ngày tháng của Việt Nam. Bạn cỏ thể sửa lại định dạng thành dd/mm/yyyy sẽ OK hơn.
Sửa xong như tôi nói trên sẽ có thêm 1 số thắc mắc tôi cần hỏi với bạn nữa!
 
* Đọc ngày tháng:
=docngay("ngày_cần_đọc", option) - Option có thể là 0; 1; 2 hoặc không cần điền vào.
Opt1: Sẽ convert ngày_cần_đọc thành dạng "text" để có thể ghép với hàm concatenate! &&&%$R
vd: =concatenate("Hôm nay là ngày ", docngay(today()) => "Hôm nay là ngày 31 tháng 7 năm 2015" //**/
Opt1: Sẽ convert thành: Ngày xx tháng xx năm xxxx
Opt3: Sẽ convert thành: Thứ x, ngày xx tháng xx năm xxxx
.
Với hàm đọc ngày tháng này tôi thấy không cần thiết lắm, bởi dùng phương pháp Custom Format cũng ra. Còn không cũng có thể dùng hàm TEXT trong Excel vẫn cho cùng kết quả
 
to gaixixon : định dạng mm/dd/yyyy có vẻ ngược lại với ngày tháng của Việt Nam. Bạn cỏ thể sửa lại định dạng thành dd/mm/yyyy sẽ OK hơn.
Sửa xong như tôi nói trên sẽ có thêm 1 số thắc mắc tôi cần hỏi với bạn nữa!
Cảm ơn bạn. Tôi cũng dự tính để dạng "dd/mm/yyyy" nhưng nếu để như thế thì ngày sẽ là dạng text, tức là không thể xử lý nó như dạng date kiểu =amlich()+1 chẳng hạn.
Tôi đã sửa lại, mặc định =amlich() sẽ hiện ra một chuỗi số, khi đó chỉ cần chọn kiểu format (manual) dạng date "dd/mm/yyyy" là hiện ra được ngày âm, và có thể xử lý dạng =amlich()+7 để ra ngày âm lịch tuần sau chẳng hạn.

amlich.0.1.zip: Ngày mặc định sẽ hiện là ở dạng số, chỉ cần custom format cell có công thức này dạng "dd/mm/yyyy" là được.
 

File đính kèm

  • amlich.0.1.zip
    44.9 KB · Đọc: 170
Cảm ơn bạn. Tôi cũng dự tính để dạng "dd/mm/yyyy" nhưng nếu để như thế thì ngày sẽ là dạng text, tức là không thể xử lý nó như dạng date kiểu =amlich()+1 chẳng hạn.
Tôi đã sửa lại, mặc định =amlich() sẽ hiện ra một chuỗi số, khi đó chỉ cần chọn kiểu format (manual) dạng date "dd/mm/yyyy" là hiện ra được ngày âm, và có thể xử lý dạng =amlich()+7 để ra ngày âm lịch tuần sau chẳng hạn.

amlich.0.1.zip: Ngày mặc định sẽ hiện là ở dạng số, chỉ cần custom format cell có công thức này dạng "dd/mm/yyyy" là được.
Trên excel 2010 của tôi luôn để định dạng Short date là dd/mm/yyyy thì thử add in trên thấy:
1) Công thức L100=amlich(K100) với K100 là 01/08/2015 thì ra kết quả là 17/06/2015 OK nhưng mà ngày âm lịch hôm nay là Ngày Kỷ Dậu tháng Kỷ Mùi năm Ất Mùi mới là chuẩn.
2) Công thức =duonglich(L100) thì ra kết quả 08/01/2015 là SAI đúng phải là 01/08/2015.
 
Lần chỉnh sửa cuối:
Bạn xem lại xem.. âm lịch của ngày mồng 7 tháng 8 năm 2015 là ngày 23 tháng 5 năm 2015 (trên máy tôi hiện đúng như vậy) chứ không phải 17/6/2015.
Convert ngược lại dương lịch của ngày 23 tháng 5 năm 2015 cũng ra kết quả mồng 7 tháng 8 năm 2015.
Còn chuyện hiện ra 8/1/2015 hay 1/8/2015 thì có thể do cách thể hiện trên máy của từng người.
Mặc định trong excel lưu trong máy luôn là month/date/year, kể cả khi nhập liệu. Còn hiện ra như thế nào thì do bạn tự format đúng không nhỉ?
 
1) âm lịch của ngày mồng 7 tháng 8 năm 2015 là ngày 23 tháng 5 năm 2015 (trên máy tôi hiện đúng như vậy) chứ không phải 17/6/2015.
Convert ngược lại dương lịch của ngày 23 tháng 5 năm 2015 cũng ra kết quả mồng 7 tháng 8 năm 2015.
2) Còn chuyện hiện ra 8/1/2015 hay 1/8/2015 thì có thể do cách thể hiện trên máy của từng người.
Mặc định trong excel lưu trong máy luôn là month/date/year, kể cả khi nhập liệu. Còn hiện ra như thế nào thì do bạn tự format đúng không nhỉ?
1) Sai --> Bạn xem lại lịch in treo tường hay để bạn đi. Hôm nay chắc chắn là ngày 17/06/2015 âm lịch. Đúng là chữ đen ở #5.
2) Khi ra kết quả chọn định dạng Short date là ra 08/01/2015 chứ không phải 01/08/2015. Định dạng trong Control panel như đã nói ở #5.
 
Cái này bạn viết nhầm (1/8) thành 7/8 nên tôi hiểu lầm.

1) Công thức L100=amlich(K100) với K100 là 07/08/2015 thì ra kết quả là 17/06/2015 OK nhưng mà ngày âm lịch hôm nay là Ngày Kỷ Dậu tháng Kỷ Mùi năm Ất Mùi mới là chuẩn.

Còn chuyện hiện ra ngày tháng như thế nào thì tôi nghĩ do tùy người dùng bạn nhỉ?
Theo nguyên tắc, do =amlich() cho ra kết quả là dạng "date", nên tôi muốn máy lưu dạng "date" (tức là trong máy là "tháng/ngày/năm", chứ không phải là "text". Việc lựa chọn hiện ra như thế nào là do người dùng format. Hy vọng bạn hiểu ý tôi.
Ví dụ:
Nếu như tôi để mặc định cell A1 có nội dung:
=amlich("8/1/2015") tức là ngày âm của ngày mồng 1 tháng 8
có output là: 23/6/2015
thì khi này, 23/6/2015 là dạng "text". Tức là bạn không thể dùng công thức =a1+1 để cho ra kết quả 24/6/2015 được. Vì nó là "text".
Tất nhiên tôi có thể đặt nó là "text", nếu bạn nào đó có nhu cầu để hiện ra như trên, nhưng như vậy nó sẽ mất định dạng "date" nên không thể sắp xếp hay +- được.
 
Cảm ơn bạn. Tôi cũng dự tính để dạng "dd/mm/yyyy" nhưng nếu để như thế thì ngày sẽ là dạng text, tức là không thể xử lý nó như dạng date kiểu =amlich()+1 chẳng hạn.
Tôi đã sửa lại, mặc định =amlich() sẽ hiện ra một chuỗi số, khi đó chỉ cần chọn kiểu format (manual) dạng date "dd/mm/yyyy" là hiện ra được ngày âm, và có thể xử lý dạng =amlich()+7 để ra ngày âm lịch tuần sau chẳng hạn.

amlich.0.1.zip: Ngày mặc định sẽ hiện là ở dạng số, chỉ cần custom format cell có công thức này dạng "dd/mm/yyyy" là được.
Hôm nay là ngày 01/08/2015 khi chuyển sang âm lịch thì sẽ thành 17/06/2015
nhưng khi chuyển 17/06/2015 (âm lịch), khi chuyển sang dương lịch thì sẽ thành 08/01/2015 => đúng của nó sẽ phải là 01/08/2015.
 
Hôm nay là ngày 01/08/2015 khi chuyển sang âm lịch thì sẽ thành 17/06/2015
nhưng khi chuyển 17/06/2015 (âm lịch), khi chuyển sang dương lịch thì sẽ thành 08/01/2015 => đúng của nó sẽ phải là 01/08/2015.
!$@!! Đó là máy nó "hiện" ra thế thôi. "08/01/201" có nghĩa là August/01/2015 tức là ngày 01 tháng 08 năm 2015. Mình nghĩ người dùng phải format để nó hiện ra "01/08/2015" chứ.

Bây giờ bạn nhập 2/3 vào excel rồi enter thì máy nó sẽ hiểu là ngày 3 tháng 2 năm 2015, chứ không phải ngày 2 tháng 3 năm 2015.
 
File ở #4 tôi thử với các ngày tử 1 đến 12 thì ra kết quả SAI (bị lộn ngược ngày tháng). Nhưng từ ngày từ 13 đến 31 thì ra kết quả ĐÚNG.
Bạn xem chỉnh lại code là OK.
 
!$@!! Đó là máy nó "hiện" ra thế thôi. "08/01/201" có nghĩa là August/01/2015 tức là ngày 01 tháng 08 năm 2015. Mình nghĩ người dùng phải format để nó hiện ra "01/08/2015" chứ.

Bây giờ bạn nhập 2/3 vào excel rồi enter thì máy nó sẽ hiểu là ngày 3 tháng 2 năm 2015, chứ không phải ngày 2 tháng 3 năm 2015.
Tôi gởi File để bạn xem
cụ thể ô C13 đã định dạng dd/mm/yy nhưng nó vẫn cho kết quả là 08/01/15
 

File đính kèm

  • ChueynNgayDuongSangAm&NguocLai.xls
    66.5 KB · Đọc: 112
Cảm ơn tác giả gaixixon đã cho một addln thật là hữu ích. Nhưng ngày 3/4/2019 dương lịch thì hàm trả về là ngày 01/3/2019 âm lịch...Tôi xem trên lịch tường thì đó là ngày 29/2/ âm lịch. Rất mong tác giả gaixixon kiểm tra lại giúp cho nhé...
 
Cảm ơn bạn. Tôi cũng dự tính để dạng "dd/mm/yyyy" nhưng nếu để như thế thì ngày sẽ là dạng text, tức là không thể xử lý nó như dạng date kiểu =amlich()+1 chẳng hạn.
Tôi đã sửa lại, mặc định =amlich() sẽ hiện ra một chuỗi số, khi đó chỉ cần chọn kiểu format (manual) dạng date "dd/mm/yyyy" là hiện ra được ngày âm, và có thể xử lý dạng =amlich()+7 để ra ngày âm lịch tuần sau chẳng hạn.

amlich.0.1.zip: Ngày mặc định sẽ hiện là ở dạng số, chỉ cần custom format cell có công thức này dạng "dd/mm/yyyy" là được.
Qúa hay. Mình đã ứng dụng để tính ngũ hàng của ngày giờ tháng và năm. Nếu có ai cần mình có thể cho để tham khảo.
 
Web KT
Back
Top Bottom