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

咨询:生成员工部门、姓名及可用日期Excel表格需用VBA还是Lookup?

员工可用日期明细生成方案

函数公式实现

不需要用Lookup函数,用TEXTJOIN+IF的组合就能搞定,适合数据量不大的场景:

  • 假设原表结构:A列=部门,B列=姓名,C到Y列=2025年各日期(表头是日期值),且已安排任务的日期单元格有内容,可用日期单元格为空
  • 在目标表的可用日期列(比如C列)输入数组公式:
    =TEXTJOIN("、",TRUE,IF(原表!C2:Y2="",TEXT(原表!C$1:Y$1,"yyyy年m月d日"),""))
    
  • 输入后按Ctrl+Shift+Enter完成数组公式确认(新版Excel支持直接回车),然后下拉公式批量生成所有员工的可用日期字符串
  • 目标表的部门、姓名列直接引用原表对应单元格即可

VBA脚本实现

如果员工或日期数量较多,函数公式运行效率低,用VBA更高效:

  1. 打开Excel,按Alt+F11打开VBA编辑器
  2. 插入新模块:右键当前工作簿→插入→模块
  3. 粘贴以下代码:
    Sub GenerateAvailableDates()
        Dim srcSheet As Worksheet, targetSheet As Worksheet
        Dim lastRow As Long, lastCol As Long, i As Long, j As Long
        Dim availableDates As String
        
        ' 设置原数据工作表和目标工作表(根据实际名称修改)
        Set srcSheet = ThisWorkbook.Sheets("原数据")
        Set targetSheet = ThisWorkbook.Sheets("目标明细")
        
        ' 清空目标表已有数据(保留表头)
        targetSheet.Range("A2:C" & targetSheet.Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
        
        ' 获取原表最后一行和最后一列
        lastRow = srcSheet.Cells(Rows.Count, 1).End(xlUp).Row
        lastCol = srcSheet.Cells(1, Columns.Count).End(xlToLeft).Column
        
        ' 遍历每位员工
        For i = 2 To lastRow
            availableDates = ""
            ' 遍历所有日期列
            For j = 3 To lastCol
                If srcSheet.Cells(i, j).Value = "" Then
                    ' 拼接可用日期字符串
                    If availableDates = "" Then
                        availableDates = Format(srcSheet.Cells(1, j).Value, "yyyy年m月d日")
                    Else
                        availableDates = availableDates & "、" & Format(srcSheet.Cells(1, j).Value, "yyyy年m月d日")
                    End If
                End If
            Next j
            
            ' 写入目标表
            targetSheet.Cells(i, 1).Value = srcSheet.Cells(i, 1).Value ' 部门
            targetSheet.Cells(i, 2).Value = srcSheet.Cells(i, 2).Value ' 姓名
            targetSheet.Cells(i, 3).Value = availableDates ' 可用日期
        Next i
        
        MsgBox "可用日期明细已生成!"
    End Sub
    
  4. 修改代码中srcSheet和targetSheet的工作表名称为实际名称
  5. 按F5运行脚本,即可自动生成目标明细表格

方案选择

  • 数据量小(几十到上百条员工):优先用函数公式,操作简单无需代码
  • 数据量大(几百条以上员工/日期列多):用VBA,运行速度更快,批量处理更省心

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:52:16