DATE CONVERTER IN EXCEL
How to use in Excel 2007:
- Install the module:
- Press
Alt + F11to open VBA editor - Go to Insert → Module
- Paste the entire code above
- Save the workbook as Macro-Enabled Workbook (.xlsm)
- Press
- Use the functions in Excel cells:Convert English to Nepali:textCopyDownload=ENGLISH_TO_NEPALI(2024, 1, 15)Returns: “2080-10-02” (example)Convert Nepali to English:textCopyDownload=NEPALI_TO_ENGLISH(2080, 10, 2)Returns: “2024-01-15” (example)
- Example with cell references:textCopyDownload=ENGLISH_TO_NEPALI(A1, B1, C1) =NEPALI_TO_ENGLISH(D1, E1, F1)
The module maintains all the original functionality from the PHP code, including:
- Date validation
- Full Nepali calendar data (1975-2095 BS)
- Conversion in both directions
- Error handling for invalid dates
Option Explicit
' Nepali Date Conversion Module for Excel 2007
' Converts between English (AD) and Nepali (BS) dates
Public Function NEPALI_TO_ENGLISH(ByVal ne_year As Long, ByVal ne_month As Long, ByVal ne_day As Long) As Variant
' Convert Nepali date to English date
' Returns a string in format "YYYY-MM-DD" or error message
On Error GoTo ErrorHandler
Dim validate As Variant
validate = ValidateNepaliDate(ne_year, ne_month, ne_day)
If validate <> True Then
NEPALI_TO_ENGLISH = validate
Exit Function
End If
Dim date_start As Date
date_start = DateSerial(1918, 4, 13)
Dim daycount As Long
daycount = 0
Dim i As Long, j As Integer
Dim months As Integer
months = ne_month - 1
' Add days from start year to target year
For i = 1975 To ne_year - 1
daycount = daycount + SumNepaliMonthDays(i)
Next i
' Add days from months before target month
For j = 0 To months - 1
daycount = daycount + GetNepaliMonthDays(ne_year, j + 1)
Next j
' Add remaining days
daycount = daycount + ne_day - 1
' Calculate English date
Dim english_date As Date
english_date = date_start + daycount
NEPALI_TO_ENGLISH = Format(english_date, "yyyy-mm-dd")
Exit Function
ErrorHandler:
NEPALI_TO_ENGLISH = "Error: " & Err.Description
End Function
Public Function ENGLISH_TO_NEPALI(ByVal en_year As Long, ByVal en_month As Long, ByVal en_day As Long) As Variant
' Convert English date to Nepali date
' Returns a string in format "YYYY-MM-DD" or error message
On Error GoTo ErrorHandler
Dim validate As Variant
validate = ValidateEnglishDate(en_year, en_month, en_day)
If validate <> True Then
ENGLISH_TO_NEPALI = validate
Exit Function
End If
Dim date_start As Date
date_start = DateSerial(1918, 4, 13)
Dim current_date As Date
current_date = DateSerial(en_year, en_month, en_day)
Dim days_diff As Long
days_diff = current_date - date_start
Dim total_days As Long
total_days = 0
Dim ne_year As Long, ne_month As Integer, ne_day As Integer
Dim i As Long, j As Integer
For i = 1975 To 2095
total_days = total_days + SumNepaliMonthDays(i)
If total_days > days_diff Then
ne_year = i
Dim prev_total As Long
prev_total = total_days - SumNepaliMonthDays(i)
For j = 1 To 12
prev_total = prev_total + GetNepaliMonthDays(i, j)
If prev_total > days_diff Then
ne_month = j
ne_day = days_diff - (prev_total - GetNepaliMonthDays(i, j)) + 1
Exit For
ElseIf prev_total = days_diff Then
ne_month = j + 1
ne_day = 1
Exit For
End If
Next j
Exit For
ElseIf total_days = days_diff Then
ne_year = i + 1
ne_month = 1
ne_day = 1
Exit For
End If
Next i
ENGLISH_TO_NEPALI = FormatDateString(ne_year, ne_month, ne_day)
Exit Function
ErrorHandler:
ENGLISH_TO_NEPALI = "Error: " & Err.Description
End Function
' Helper functions
Private Function SumNepaliMonthDays(ByVal year As Long) As Long
' Calculate total days in a Nepali year
Dim total As Long
total = 0
Dim i As Integer
For i = 1 To 12
total = total + GetNepaliMonthDays(year, i)
Next i
SumNepaliMonthDays = total
End Function
Private Function GetNepaliMonthDays(ByVal year As Long, ByVal month As Integer) As Integer
' Get days in a specific Nepali month
Dim month_days As Variant
month_days = GetNepaliYearData(year)
If IsArray(month_days) And month >= 1 And month <= 12 Then
GetNepaliMonthDays = month_days(month - 1)
Else
GetNepaliMonthDays = 0
End If
End Function
Private Function GetNepaliYearData(ByVal year As Long) As Variant
' Return array of days for each month of a Nepali year
Select Case year
Case 1975: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 1976: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 1977: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1978: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1979: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 1980: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 1981: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1982: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 1983: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 1984: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 1985: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1986: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 1987: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 1988: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 1989: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1990: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31)
Case 1991: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 1992: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 1993: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1994: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 1995: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 1996: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 29, 30, 30, 29, 30, 30)
Case 1997: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 1998: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 1999: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2000: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2001: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2002: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2003: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2004: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2005: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2006: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2007: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2008: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31)
Case 2009: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2010: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2011: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2012: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 2013: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2014: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2015: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2016: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 2017: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2018: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2019: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2020: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2021: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2022: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2023: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2024: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2025: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2026: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2027: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2028: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2029: GetNepaliYearData = Array(31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30)
Case 2030: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2031: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2032: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2033: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2034: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2035: GetNepaliYearData = Array(30, 32, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31)
Case 2036: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2037: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2038: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2039: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 2040: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2041: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2042: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2043: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 2044: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2045: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2046: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2047: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2048: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2049: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2050: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2051: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2052: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2053: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2054: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2055: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2056: GetNepaliYearData = Array(31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30)
Case 2057: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2058: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2059: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2060: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2061: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2062: GetNepaliYearData = Array(30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31)
Case 2063: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2064: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2065: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2066: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31)
Case 2067: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2068: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2069: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2070: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30)
Case 2071: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2072: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2073: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31)
Case 2074: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2075: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2076: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2077: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2078: GetNepaliYearData = Array(31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2079: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2080: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2081: GetNepaliYearData = Array(31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31)
Case 2082: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30)
Case 2083: GetNepaliYearData = Array(31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2084: GetNepaliYearData = Array(31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2085: GetNepaliYearData = Array(31, 32, 31, 32, 30, 31, 30, 30, 29, 30, 30, 30)
Case 2086: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2087: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30)
Case 2088: GetNepaliYearData = Array(30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30)
Case 2089: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2090: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2091: GetNepaliYearData = Array(31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30)
Case 2092: GetNepaliYearData = Array(30, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2093: GetNepaliYearData = Array(30, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30)
Case 2094: GetNepaliYearData = Array(31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30)
Case 2095: GetNepaliYearData = Array(31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 30, 30)
Case Else: GetNepaliYearData = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
End Select
End Function
Private Function ValidateNepaliDate(ByVal year As Long, ByVal month As Long, ByVal day As Long) As Variant
' Validate Nepali date
If year < 1975 Or year > 2095 Then
ValidateNepaliDate = "Invalid Year range (1975-2095)"
Exit Function
End If
If month < 1 Or month > 12 Then
ValidateNepaliDate = "Invalid Month range (1-12)"
Exit Function
End If
Dim max_days As Integer
max_days = GetNepaliMonthDays(year, month)
If day < 1 Or day > max_days Then
ValidateNepaliDate = "Invalid Day for this month"
Exit Function
End If
ValidateNepaliDate = True
End Function
Private Function ValidateEnglishDate(ByVal year As Long, ByVal month As Long, ByVal day As Long) As Variant
' Validate English date
If year < 1918 Or year > 2038 Then
ValidateEnglishDate = "Invalid Year range (1918-2038)"
Exit Function
End If
If month < 1 Or month > 12 Then
ValidateEnglishDate = "Invalid Month range (1-12)"
Exit Function
End If
Dim max_days As Integer
max_days = Day(DateSerial(year, month + 1, 0))
If day < 1 Or day > max_days Then
ValidateEnglishDate = "Invalid Day for this month"
Exit Function
End If
ValidateEnglishDate = True
End Function
Private Function FormatDateString(ByVal year As Long, ByVal month As Integer, ByVal day As Integer) As String
' Format date as YYYY-MM-DD
FormatDateString = Format(year, "0000") & "-" & Format(month, "00") & "-" & Format(day, "00")
End Function

Leave a Reply