Đôi khi bạn muốn chuyển đổi kiểu lịch trong Excel cho từng mục đích sử dụng riêng. Bài viết hôm nay sẽ hướng dẫn các bạn cách chuyển đổi dương lịch sang âm lịch trong Excel và ngược lại. Hãy cùng theo dõi những hướng dẫn chi tiết dưới đây nhé!
1. Tầm quan trọng của việc chuyển đổi ngày dương lịch sang ngày âm lịch
Thế giới ngày càng phát triển, Việt Nam cũng dần hội nhập hơn với sự phát triển hiện đại, chính vì vậy mà dương lịch được sử dụng phổ biến trên thế giới. Tuy nhiên ngày âm lịch có vai trò quan trọng đối với Việt Nam và các nước phương Đông khác. Ngày âm lịch vẫn được sử dụng để tính những ngày lễ Tết, cưới hỏi,…
2. Cách chuyển đổi ngày dương lịch sang âm lịch và ngược lại trong Excel
Đầu tiên bạn thực hiện mở file Excel, sau đó gọi phầm mềm VBA (Visual Basic for Applications) bằng cách click chuột phải và sheet rồi sau đó chọn lệnh View code
Ngoài ra bạn cũng có thể dùng tổ hợp phím tắt Alt + 11. Khi này hộp thoại VBA hiện lên trên màn hình, bạn click chuột vào mục Insert rồi chọn lệnh Module
Bước tiếp theo chúng ta thực hiện sao chép đoạn code dưới đây và dán vào phần soạn thảo:
Option Explicit
Public Lday, Lmonth As Byte, Lyear As Integer, isLeap, LunarInfo
‘Ho ngoc Duc, truongphu chú thích
Sub lunar(d, m, y)
Dim DiffADate, Counter, i, Temp, Leap
‘ tính sô ngày tù môc 1/31/1900 ‘ghi chú: d se Ðuoc xem nhu month
DiffADate = DateDiff(“d”, #1/31/1900#, CDate(m & “-” & d & “-” & y))
Counter = -1 ‘ngày 31/1/1900 có DateDiff = 0 tuong úng ÂL là ngày 1
‘nên counter = -1 vì ngày ÂL = DateDiff – counter
Lyear = 1900 ‘nam bat Ðâu tính, Lyear là nam ÂL tuong Ðuong DL
For i = Lyear To 2199 ‘ Ðêm trong 300 nam kê tiêp
Temp = YearDays(i) ‘goi Function YearDays nam Ðang Ðêm = sô ngày/nam
Counter = Counter + Temp ‘cong sô ngày dôn
If Counter >= DiffADate Then ‘nêu sô ngày dôn >= DiffADate
Counter = Counter – Temp ‘ tru` sô ngày dôn 1 nam Ðang tính
Exit For ‘và thoát vòng lap, = Ðã có giá tri Lyear
End If
Lyear = Lyear + 1 ‘nam Ðang Ðêm thêm 1 don vi
Next
‘so’ di phai tính nhu thê Ðê tìm chính xác nhung ngày cuôi nam ÂL mà Ðã sang nam mo’i DL
‘trong truong hop nây, xem nhu vân nam cu
Leap = LeapMonth(Lyear) ‘ goi hàm LeapMonth, tháng nhuân là tháng mây?
isLeap = “” ‘ set giá tri xác Ðinh cua tháng nhuân = “”
Lmonth = 1
For i = 1 To 12
If Leap > 0 And i = Leap + 1 And isLeap = “” Then
isLeap = “(N)” ‘nêu tháng nhuân có và I lo’n hon 1 thì Nhuân
Lmonth = Lmonth – 1 ‘tháng lùi 1
i = i – 1 ‘Ðêm lùi 1
Temp = LeapDay(Lyear) ‘ goi hàm leapday, tính sô ngày nhuân
Else
Temp = MonthDays(Lyear, i) ‘goi hàm monthdays tính sô ngày thuong
End If
If isLeap = “(N)” And i <> Leap Then isLeap = “”
‘ Nêu xác dinh Nhuân và I khác tháng nhuân thì Xác Ðinh không phai Nhuan
Counter = Counter + Temp ‘ cong dôn ngày tù vi trí Exit For khi xác Ðinh Lyear
If Counter >= DiffADate Then ‘nêu sô ngày dôn >= DiffADate
Counter = Counter – Temp ‘ tru` sô ngày dôn 1 tháng Ðang tính
Exit For ‘và thoát vòng lap, = Ðã có giá tri Lmonth
End If
Lmonth = Lmonth + 1 ‘tháng Ðang Ðêm thêm 1 don vi
Next
Lday = DiffADate – Counter ‘Ngày Ðuoc xác Ðinh
End Sub
Function LeapMonth(y) ””””””
If y >= 1900 Then LeapMonth = LunarInfo(y – 1900) And &HF Else LeapMonth = 0
‘Tháng nhuân = LunarInfo(nam Ðang chuyên) And &HF = ( tu 0 – 12) ngoài ra thì = 0
End Function
Function LeapDay(y) ”””””
If LunarInfo(y – 1900) And &HF Then ‘nêu có tháng nhuân thì
If LunarInfo(y – 1900) And &H10000 Then LeapDay = 30 Else LeapDay = 29
‘ Nêu LunarInfo(nam Ðang chuyên) And &H10000 > 0 thì 30 không thì 29 ngày
Else
LeapDay = 0
End If
End Function
Function MonthDays(y, m) ”””””””’
Dim MonthMask
MonthMask = Array(32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16)
‘ Mang loc tháng(1-12) = MonthMask(0-11)
‘ Nêu LunarInfo(nam Ðang chuyên) And Mang loc tháng(tháng Ðang chuyên) > 0 thì 30 ngoài ra thì 29
If LunarInfo(y – 1900) And MonthMask(m – 1) Then MonthDays = 30 Else MonthDays = 29
End Function
Function YearDays(y) ””””””’
Dim i, MonthMask
MonthMask = Array(32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16)
YearDays = 348 ’12 tháng x 29 ngày
For i = 0 To 11 ‘tháng nào có 30 ngày thì thêm 1
If LunarInfo(y – 1900) And MonthMask(i) Then YearDays = YearDays + 1
Next
YearDays = YearDays + LeapDay(y) ‘ cong thêm sô ngày nhuân nêu có
End Function
‘Ham so chuyen doi tu Duong lich sang Am lich dang ngay,thang,nam
Public Function TransLu(d, m, y)
Call Goi
‘ cau trúc cua hàm lunar là (d, m, y), VB6 dùng (m, d, y) nên function TransLu
‘ se doi vi tri câu trúc khi goi hàm lunar
Call lunar(m, d, y)
TransLu = Lday & “/” & Lmonth & isLeap & “/” & Lyear
End Function
‘Ham so chuyen doi tu Duong lich sang Am lich dang tu mot o
Public Function TransLu1(NT As Date) ‘ NT = ngày tháng
Call lunar(Day(NT), Month(NT), Year(NT)) ‘goi hàm Lunar theo câu trúc nây ?
‘ Ðê nghi nhu’ hàm TransLu làm: Call lunar(Month(NT), Day(NT), Year(NT))
‘TransLu1 = Lday & “-” & Lmonth & isLeap & “-” & CanchiV(Lyear – 0)
‘Hàm CanchiV bi thiêu!
End Function
Public Function TransSolar(d, m, y) As Date ‘Ngay thang nam am lich sang duong lich
Dim iSd As Date
iSd = DateSerial(y, m, d) – 70
Do
iSd = iSd + 1
Loop Until TransLu(Day(iSd), Month(iSd), Year(iSd)) = d & “/” & m & “/” & y
TransSolar = iSd
End Function
‘Cach su dung:
Private Sub Command1_Click()
If Days = “” Or Months = “” Or Years = “” Then Exit Sub
NgayAL = TransLu(Days, Months, Years)
End Sub
Private Sub Command2_Click()
If Years = “” Then Exit Sub
ThangNhuan = LeapMonth(Years)
End Sub
Private Sub Command3_Click()
If Years = “” Then Exit Sub
SoNgayNhuan = LeapDay(Years)
End Sub
Private Sub Command4_Click()
If Years = “” Or Months = “” Then Exit Sub
SoNgayThangT = MonthDays(Years, Months)
End Sub
Private Sub Command5_Click()
If Years = “” Then Exit Sub
SoNgayNam = YearDays(Years)
End Sub
Sub Goi()
‘Mang do HoNgocDuc tu xây dung, chu’a thông tin nam ÂL tu 1900-2199
‘nam Ðó tháng mây nhuân? gôm mây ngày? Môi tháng còn lai có mây ngày? nam Ðó có mây ngày?
LunarInfo = Array( _
&H3C4BD8, &H624AE0, &H4CA570, &H3854D5, &H5CD260, &H44D950, &H315554, &H5656A0, &H409AD0, &H2A55D2, &H504AE0, &H3AA5B6, &H60A4D0, &H48D250, &H33D255, &H58B540, &H42D6A0, &H2CADA2, &H5295B0, &H3F4977, _
&H644970, &H4CA4B0, &H36B4B5, &H5C6A50, &H466D40, &H2FAB54, &H562B60, &H409570, &H2C52F2, &H504970, &H3A6566, &H5ED4A0, &H48EA50, &H336A95, &H585AD0, &H442B60, &H2F86E3, &H5292E0, &H3DC8D7, &H62C950, _
&H4CD4A0, &H35D8A6, &H5AB550, &H4656A0, &H31A5B4, &H5625D0, &H4092D0, &H2AD2B2, &H50A950, &H38B557, &H5E6CA0, &H48B550, &H355355, &H584DA0, &H42A5B0, &H2F4573, &H5452B0, &H3CA9A8, &H60E950, &H4C6AA0, _
&H36AEA6, &H5AAB50, &H464B60, &H30AAE4, &H56A570, &H405260, &H28F263, &H4ED940, &H38DB47, &H5CD6A0, &H4896D0, &H344DD5, &H5A4AD0, &H42A4D0, &H2CD4B4, &H52B250, &H3CD558, &H60B540, &H4AB5A0, &H3755A6, _
&H5C95B0, &H4649B0, &H30A974, &H56A4B0, &H40AA50, &H29AA52, &H4E6D20, &H39AD47, &H5EAB60, &H489370, &H344AF5, &H5A4970, &H4464B0, &H2C74A3, &H50EA50, &H3D6A58, &H6256A0, &H4AAAD0, &H3696D5, &H5C92E0, _
&H46C960, &H2ED954, &H54D4A0, &H3EDA50, &H2A7552, &H4E56A0, &H38A7A7, &H5EA5D0, &H4A92B0, &H32AAB5, &H58A950, &H42B4A0, &H2CBAA4, &H50AD50, &H3C55D9, &H624BA0, &H4CA5B0, &H375176, &H5C5270, &H466930, _
&H307934, &H546AA0, &H3EAD50, &H2A5B52, &H504B60, &H38A6E6, &H5EA4E0, &H48D260, &H32EA65, &H56D520, &H40DAA0, &H2D56A3, &H5256D0, &H3C4AFB, &H6249D0, &H4CA4D0, &H37D0B6, &H5AB250, &H44B520, &H2EDD25, _
&H54B5A0, &H3E55D0, &H2A55B2, &H5049B0, &H3AA577, &H5EA4B0, &H48AA50, &H33B255, &H586D20, &H40AD60, &H2D4B63, &H525370, &H3E49E8, &H60C970, &H4C54B0, &H3768A6, &H5ADA50, &H445AA0, &H2FA6A4, &H54AAD0, _
&H4052E0, &H28D2E3, &H4EC950, &H38D557, &H5ED4A0, &H46D950, &H325D55, &H5856A0, &H42A6D0, &H2C55D4, &H5252B0, &H3CA9B8, &H62A930, &H4AB490, &H34B6A6, &H5AAD50, &H4655A0, &H2EAB64, &H54A570, &H4052B0, _
&H2AB173, &H4E6930, &H386B37, &H5E6AA0, &H48AD50, &H332AD5, &H582B60, &H42A570, &H2E52E4, &H50D160, &H3AE958, &H60D520, &H4ADA90, &H355AA6, &H5A56D0, &H462AE0, &H30A9D4, &H54A2D0, &H3ED150, &H28E952, _
&H4EB520, &H38D727, &H5EADA0, &H4A55B0, &H362DB5, &H5A45B0, &H44A2B0, &H2EB2B4, &H54A950, &H3CB559, &H626B20, &H4CAD50, &H385766, &H5C5370, &H484570, &H326574, &H5852B0, &H406950, &H2A7953, &H505AA0, _
&H3BAAA7, &H5EA6D0, &H4A4AE0, &H35A2E5, &H5AA550, &H42D2A0, &H2DE2A4, &H52D550, &H3E5ABB, &H6256A0, &H4C96D0, &H3949B6, &H5E4AB0, &H46A8D0, &H30D4B5, &H56B290, &H40B550, &H2A6D52, &H504DA0, &H3B9567, _
&H609570, &H4A49B0, &H34A975, &H5A64B0, &H446A90, &H2CBA94, &H526B50, &H3E2B60, &H28AB61, &H4C9570, &H384AE6, &H5CD160, &H46E4A0, &H2EED25, &H54DA90, &H405B50, &H2C36D3, &H502AE0, &H3A93D7, &H6092D0, _
&H4AC950, &H32D556, &H58B4A0, &H42B690, &H2E5D94, &H5255B0, &H3E25FA, &H6425B0, &H4E92B0, &H36AAB6, &H5C6950, &H4674A0, &H31B2A5, &H54AD50, &H4055A0, &H2AAB73, &H522570, &H3A5377, &H6052B0, &H4A6950, _
=
&H346D56, &H585AA0, &H42AB50, &H2E56D4, &H544AE0, &H3CA570, &H2864D2, &H4CD260, &H36EAA6, &H5AD550, &H465AA0, &H30ADA5, &H5695D0, &H404AD0, &H2AA9B3, &H50A4D0, &H3AD2B7, &H5EB250, &H48B540, &H33D556) ” /* Years 2100-2199 */=
End Sub
Sau khi đã dán được đoạn code vào phần soạn thảo thì bạn thực hiện quay lại file Excel ban đầu để thực hiện chuyển đổi. Lưu ý rằng bạn vẫn giữ nguyên cửa sổ VBA trong quá trình thục hiện chuyển đổi
Để có thể chuyển đổi từ dương lịch sang âm lịch trong Excel thì chúng ta sử dụng hàm DWAMLICH
Như ví dụ dưới đây chúng ta sẽ thực hiện chuyển đổi ngày dương lịch trong ô B2 thành âm lịch
– Cú pháp hàm: =DWAMLICH(DAY(B2),MONTH(B2),YEAR(B2))
Hoặc bạn cũng có thể nhập cụ thể ngày tháng dương lịch trong hàm với cú pháp =DWAMLICH(27,10,2021) và nhấn Enter
Khi này kết quả hiện trên màn hình bạn thực hiện sao chép công thức xuống những ô dưới để thực hiện chuyển đổi
Bên cạnh đó, bạn có thể chuyển đổi ngược lại từ ngày âm lịch sang dương lịch trong Excel bằng cách sử dụng hàm DWDUONGLICH. Cú pháp hàm sẽ là:
=DWDUONGLICH(DAY(B6),MONTH(B6),YEAR(B6))
hoặc =DWDUONGLICH(21,9,2021)
Kết quả sẽ được hiển thị trên màn hình và thực hiện sao chép công thức với những ô phía dưới
Trên đây là những chia sẻ giúp các bạn có thể biết cách chuyển đổi dương lịch sang âm lịch trong Excel. Hi vọng các bạn có thể ứng dụng trong quá trình làm việc để phục vụ những mục đích riêng. Chúc các bạn thành công, hẹn gặp ở bài viết tiếp!