Excel创建无重复授权值列表并在VBA中获取选中日期
动态生成无重复日期列表(自动更新)
首先,假设你的日期数据在A列(表头是A1的Date,日期从A2开始),可以用Excel的动态数组公式实现自动更新的无重复日期列表:
在你想要显示结果的单元格(比如C1)输入公式:
=UNIQUE(FILTER(A:A, A:A<>"Date", A:A<>""))
FILTER(A:A, A:A<>"Date", A:A<>""):筛选出A列中不是表头Date且不为空的所有日期单元格;UNIQUE():对筛选后的结果去重,生成无重复的日期列表;- 这个公式是动态数组,当你在原列表中新增行(添加新日期)时,结果列表会自动更新,不需要手动刷新。
注意:这个公式需要Excel 365或Excel 2021及以上版本支持动态数组。如果是旧版Excel,可以用
INDEX+MATCH的组合公式实现去重,但无法自动更新,需要手动刷新或结合VBA。
VBA保存选中日期到变量
下面提供两种VBA方案,分别对应选中单个日期和多个日期的场景:
场景1:选中单个日期单元格
Sub SaveSingleSelectedDate() Dim selectedDate As Date ' 检查是否只选中了一个单元格 If Selection.Cells.Count = 1 Then ' 验证选中内容是否为日期格式 If IsDate(Selection.Value) Then selectedDate = Selection.Value ' 这里可以添加你后续需要执行的操作,比如打印变量值确认 MsgBox "选中的日期已保存到变量:" & Format(selectedDate, "dd/mm/yy") Else MsgBox "请选中一个有效的日期单元格!" End If Else MsgBox "请选中单个日期单元格!" End If End Sub
场景2:选中多个日期单元格
如果需要一次性保存多个选中的日期到数组变量,可以用这段代码:
Sub SaveMultipleSelectedDates() Dim selectedDates() As Date Dim cell As Range Dim dateCount As Integer dateCount = 0 ' 先初始化数组大小为选中单元格的数量 ReDim selectedDates(1 To Selection.Cells.Count) ' 遍历选中的每个单元格,筛选日期并保存 For Each cell In Selection If IsDate(cell.Value) Then dateCount = dateCount + 1 selectedDates(dateCount) = cell.Value End If Next cell ' 调整数组大小到实际保存的日期数量 ReDim Preserve selectedDates(1 To dateCount) ' 示例:提示保存结果 If dateCount > 0 Then MsgBox "成功保存" & dateCount & "个日期,第一个日期是:" & Format(selectedDates(1), "dd/mm/yy") Else MsgBox "未选中任何有效的日期单元格!" End If End Sub
使用方法:
- 按下
Alt + F11打开VBA编辑器; - 右键点击你的工作簿,选择「插入」→「模块」;
- 将上面的代码粘贴到模块中;
- 回到Excel界面,选中日期单元格,按下
Alt + F8选择对应的宏并运行。
内容的提问来源于stack exchange,提问作者Hich
相关产品推荐
相关产品推荐

