Chuyển đổi dương lịch sang âm lịch trong Excel

Đô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

Chuyển đổi dương lịch sang âm lịch trong Excel

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

Chuyển đổi dương lịch sang âm lịch trong Excel

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

Chuyển đổi dương lịch sang âm lịch trong Excel

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

Chuyển đổi dương lịch sang âm lịch trong Excel

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

Chuyển đổi dương lịch sang âm lịch trong Excel

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!