首页 文章

动态更改下拉列表中一个月的天数

提问于
浏览
1

它必须在没有VBA的情况下完成 .

A1说,我有一个月份的清单要填写一个单元格 . 可以使用Data Validation-List(= Months)填充选项,这会导致下拉列表出现在A1中 . 在单元格B1中输入年份编号(例如2000) . 现在我希望C1包含一个下拉列表,其中的条目根据A1和B1中的数据进行更改 . 在我的例子中,A1提供了选择1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月和12月 .

如果我选择1月或3月或可能或7月或8月或10月或12月(31天的月份),我应该在C1中选择1到31之间的数字作为选项 .

如果我选择4月或6月或9月或11月(30天的月份),我应该在C1中选择1到30之间的数字作为选项 .

如果我选择二月,我必须先用这个公式检查一年是否是闰年:

=((MOD(B1;4)=0)*((MOD(B1;100)<>0)+(MOD(B1;400)=0))=1)

并且根据这个公式的结果(TRUE或FALSE),我应该得到1到28之间的数字(如果是闰年,则为29)作为C1的选项 .

我创建了名为Days30,Days31,Days28和Days29的列表 . 如何使用数据验证在我的下拉列表中切换这些列表?我正在尝试将此逻辑转换为数据验证公式,但没有运气:

If (A1 = "april" OR A1 = "june" OR A1 = "september" OR A1 = "november") Then 
    Days30
ElseIf (A1 = "february" AND leapyear = 1) Then 
    Days29  
ElseIf (A1 = "february" AND leapyear = 0) Then 
    Days28
Else                
    Days31
End if

1 回答

  • 3
    • 在Z1中放了这个公式,

    =DAY(DATEVALUE(A$1&" "&ROW(1:1)&", "&B$1))

    • 在Z2中放了这个公式,

    =IFERROR(IF(MONTH(DATEVALUE(A$1&" "&ROW(1:1)&", "&B$1))=MONTH(DATEVALUE(A$1&" "&ROW(2:2)&", "&B$1)), DAY(DATEVALUE(A$1&" "&ROW(2:2)&", "&B$1)), ""), "")

    ......并填写Z31 .

    • 转到公式►定义的名称►名称管理器 . “名称管理器”对话框打开后,单击“新建”

    • 为其命名(例如lstDOM),将其保留为工作簿范围,并为参考提供以下内容:
      =Sheet1!$Z$1:INDEX(Sheet1!$Z:$Z, MATCH(1e99, Sheet1!$Z:$Z))

    dynamic named range

    • 单击“确定”以创建动态命名范围,然后单击“关闭” .

    • 选择C1后,转到数据►数据工具►数据验证 . 选择允许:列表并为源:提供 =lstDOM .

    您的结果应类似于以下内容 .

    dynamic range days of month

相关问题