You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel中验证符合yyyy/mm/dd格式的波斯历日期有效性

Excel波斯(贾拉利)历日期的数据验证方案

针对Excel数据有效性默认公历1900年下限限制,无法直接验证1300-1400区间波斯历日期的问题,提供两种可行方案:

方案1:纯公式格式验证(无需VBA)

选中目标列后打开「数据验证」,选择「自定义」类型,输入以下公式:

=AND(
    LEFT(A1,4)+0>=1300, LEFT(A1,4)+0<=1400,
    MID(A1,6,2)+0>=1, MID(A1,6,2)+0<=12,
    RIGHT(A1,2)+0>=1, RIGHT(A1,2)+0<=31,
    ISNUMBER(LEFT(A1,4)+0), ISNUMBER(MID(A1,6,2)+0), ISNUMBER(RIGHT(A1,2)+0),
    MID(A1,5,1)="/", MID(A1,8,1)="/"
)

这个公式会检查:

  • 日期格式严格为yyyy/mm/dd,分隔符是斜杠
  • 年份在1300-1400区间,月份1-12,日期1-31
  • 年、月、日部分均为数字

可在「输入信息」中添加提示:请输入yyyy/mm/dd格式的波斯历日期(年份1300-1400),「出错警告」设置为停止类型,避免无效输入。

方案2:VBA自定义函数(严格验证日期合法性)

如果需要验证波斯历的真实日期有效性(比如区分月份天数、闰年),可以用VBA实现:

  1. 按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
Function IsValidJalaliDate(jalaliDate As String) As Boolean
    Dim y As Integer, m As Integer, d As Integer
    Dim parts() As String
    parts = Split(jalaliDate, "/")
    
    ' 检查格式是否为三段式
    If UBound(parts) <> 2 Then
        IsValidJalaliDate = False
        Exit Function
    End If
    
    ' 检查各部分是否为数字
    If Not IsNumeric(parts(0)) Or Not IsNumeric(parts(1)) Or Not IsNumeric(parts(2)) Then
        IsValidJalaliDate = False
        Exit Function
    End If
    
    y = CInt(parts(0))
    m = CInt(parts(1))
    d = CInt(parts(2))
    
    ' 波斯历月份天数规则
    Dim maxDay As Integer
    Select Case m
        Case 1 To 6: maxDay = 31
        Case 7 To 11: maxDay = 30
        Case 12:
            ' 波斯历闰年判断规则
            If (y Mod 33) = 0 Or (y Mod 33) = 1 Or (y Mod 33) = 5 Or _
               (y Mod 33) = 9 Or (y Mod 33) = 13 Or (y Mod 33) = 17 Or _
               (y Mod 33) = 22 Or (y Mod 33) = 26 Or (y Mod 33) = 30 Then
                maxDay = 30
            Else
                maxDay = 29
            End If
        Case Else:
            IsValidJalaliDate = False
            Exit Function
    End Select
    
    ' 最终验证范围
    IsValidJalaliDate = (y >= 1300 And y <= 1400) And _
                        (m >= 1 And m <= 12) And _
                        (d >= 1 And d <= maxDay)
End Function
  1. 返回Excel,选中目标列设置数据验证「自定义」,输入公式:
=IsValidJalaliDate(A1)

这样就能确保输入的是真实有效的波斯历日期,而非仅格式正确的字符串。

内容的提问来源于stack exchange,提问作者Mohamed Mostafa El-Sayyad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:40:55