Nhờ các bạn tạo cột ngày âm lịch dựa theo ngày dương lịch

Liên hệ QC

Thay

Thành viên thường trực
Tham gia
31/12/06
Bài viết
220
Được thích
286
Nghề nghiệp
CA
Nhờ các bạn tạo công thức hoặc VBA để tạo được cột ngày âm lịch theo cột ngày dương lịch
 

File đính kèm

  • AmLich.xls
    39.5 KB · Đọc: 36

File đính kèm

  • AmLich.xls
    80 KB · Đọc: 30
Nhờ bạn Hong.Van xem lại hộ tôi file bạn làm cho tôi. Tôi tải về dùng cho năm 2008 thì bị sai một số ngày âm (tôi đánh dấu mầu vàng)
 

File đính kèm

  • AmLichSai.xls
    89 KB · Đọc: 19
Nhờ bạn Hong.Van xem lại hộ tôi file bạn làm cho tôi. Tôi tải về dùng cho năm 2008 thì bị sai một số ngày âm (tôi đánh dấu mầu vàng)
cách xử lý: bạn đặt con trỏ chuột ở trên thanh cthức rồi enter (ví dụ chọn cell B9-> bấm fím F2 -> Enter) bạn thử xem sao!!!!
 
Cha này có vẻ lọ mọ với khoa lý số hoc Đông phương nhỉ?
Mình gửi cho bạn Code tính âm dương lịch phiên bản sau của Hồ Ngọc Đức và có độ chuẩn xác cao hơn. Đồng thời cũng cho thông tin đầy đủ về ngày đó.
Mình đã hiệu chỉnh chạy trên môi trường VBA của mình và kết quả bằng font Unicode. Chúc vui nha.
 

File đính kèm

  • AM-DUONG LICH.xls
    110.5 KB · Đọc: 72
Lần chỉnh sửa cuối:
Cảm ơn bạn SEALAND, thật ra tôi chỉ cần hiện ra ngày tháng âm lịch thôi cũng không cần hiện nhiều thứ như bạn đã làm hộ. Bạn có thế chỉnh lại theo đề nghị của tôi không. Tôi rất dốt về VBA
ý tôi là khi mình ghi nhật ký ngày nào thì tự hiện ra ngày âm để tiện theo dõi
Một lần nữa xin cảm ơn bạn.
 
Mấy hôm rồi nghỉ cuối tuần không vào GPE nên không biết, nay mình xin bổ xung nha.
Các Code khác (Nhất là hàm LayThoiGianAL() là hàm gốc chuẩn) tốt nhất bạn nên để nguyên để khi cần về thời gian đề có được.
Mình viết cho bạn hàm mới với cấu trúc kết quả như bạn yêu cầu. Nhưng để đảm bảo thông tin thì nếu là tháng Âm Lịch nhuận thì phải thêm "(Tháng Nhuận)" vào kết quả để phân biệt tháng thường và tháng nhuận. Nếu không cần thì đánh dấu hay xoá hẳn dòng code màu đỏ.
Bạn chép bổ xung vào Hàm sau:

Mã:
Public Function AmLich(ByVal solarday As Integer, ByVal solarmonth As Integer, ByVal solaryear As Integer) As String
    Dim Vsteam(9) As String, Vbranch(11) As String, llm As Boolean
    Dim mStr$
        'khai bao thien can tieng viet
        Vsteam(0) = "Gia1p":        Vsteam(1) = "A61t":        Vsteam(2) = "Bi1nh":        Vsteam(3) = "D9inh"
        Vsteam(4) = "Ma65u":        Vsteam(5) = "Ky3":        Vsteam(6) = "Canh":        Vsteam(7) = "Ta6n"
        Vsteam(8) = "Nha6m":        Vsteam(9) = "Quy1"
        'khai bao dia chi tieng viet
        Vbranch(0) = "Ty1":        Vbranch(1) = "Su73u":        Vbranch(2) = "Da62n":        Vbranch(3) = "Ma4o"
        Vbranch(4) = "Thi2n":        Vbranch(5) = "Ty5":        Vbranch(6) = "Ngo5":        Vbranch(7) = "Mu2i"
        Vbranch(8) = "Tha6n":        Vbranch(9) = "Da65u":        Vbranch(10) = "Tua61t":        Vbranch(11) = "Ho75i"

        With solar2lunar(solarday, solarmonth, solaryear, local_timezone)
            mStr = .lunarday
            mStr = mStr & "/" & .lunarmonth & " - "
            mStr = mStr & Vsteam((.lunaryear + 6) Mod 10)
            mStr = mStr & " " & Vbranch((.lunaryear + 8) Mod 12)
         [B][COLOR=#ff0000]  mStr = mStr & IIf(.leapmoon, " (Tha1ng Nhua65n)", "")[/COLOR][/B]
        End With
        AmLich = ToUni(mStr)
End Function

Giờ bạn có thể sử dụng với cú pháp như sau:

=AmLich(Ngay DL, ThangDL, NamDL)

Nếu có sai sót hoặc vấn đề gì thông tin lại nha. (Ngày tháng trong file ví dụ mình đổi sang năm 2014 để các bạn test tháng 9 nhuận)
 

File đính kèm

  • AM-DUONG LICH.xls
    135.5 KB · Đọc: 53
Lần chỉnh sửa cuối:
Cái hàm bài trước dài và loằng ngoằng quá, có thể viết lại như sau:

Mã:
Public Function Amlich1(ByVal solarday As Integer, ByVal solarmonth As Integer, ByVal solaryear As Integer) As String
    Dim Vsteam, Vbranch, mStr$
         Vsteam = Split("Gia1p;A61t;Bi1nh;D9inh;Ma65u;Ky3;Canh;Ta6n;Nha6m;Quy1", ";")
            Vbranch = Split("Ty1;Su73u;Da62n;Ma4o;Thi2n;Ty5;Ngo5;Mu2i;Tha6n;Da65u;Tua61t;Ho75i", ";")
                With solar2lunar(solarday, solarmonth, solaryear, local_timezone)
                    Amlich1 = .lunarday
                        Amlich1 = Amlich1 & "/" & .lunarmonth & " - "
                    Amlich1 = Amlich1 & Vsteam((.lunaryear + 6) Mod 10)
                Amlich1 = Amlich1 & " " & Vbranch((.lunaryear + 8) Mod 12)
           Amlich1 = Amlich1 & IIf(.leapmoon, " (Tha1ng Nhua65n)", "")
        End With
    Amlich1 = ToUni(Amlich1)
End Function
 
cách xử lý: bạn đặt con trỏ chuột ở trên thanh cthức rồi enter (ví dụ chọn cell B9-> bấm fím F2 -> Enter) bạn thử xem sao!!!!

Tôi đã thử lại với máy cài Win XP thì đúng, còn chạy ở 2 máy cài Win7 thì bị sai không biết tại sao.
 
Cái hàm bài trước dài và loằng ngoằng quá, có thể viết lại

Cảm ơn bạn Sealand
Theo tôi thì đối với file này có code ngắn hay dài thì tốc độ chạy không khác nhau. Code của bạn tôi đã thử chạy trên các máy đều đúng, riêng code của bạn Hong.Van chạy trên máy cài Win XP thì đúng, còn chạy trên máy cài Win7 đều sai cả ở Word 2003 và word 2013, không biết tại sao, mong các bạn kiểm tra giúp.
 
Web KT

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

Back
Top Bottom