如何设置条件触发规则实现单元格数据自动复制(会议考勤适用)
考勤自动统计实现方案
适用前提
假设你表格的基础结构如下,可根据你的实际情况修改对应参数:
- 参会人姓名存放在 A列,从A2行开始
- 出席标记输入在 B列,和姓名行一一对应
- 出席人员姓名汇总输出到 D列
Excel 实现方法
方案1:函数公式(无需宏,兼容性好)
- 选中第一个要输出出席姓名的单元格(比如D2),输入以下公式:
=IFERROR(INDEX($A$2:$A$100,SMALL(IF($B$2:$B$100="P",ROW($A$2:$A$100)-ROW($A$1),""),ROW(A1))),"")
- 输入完成后:
- Excel 365/2021版本:直接按回车即可
- 更低版本:按
Ctrl+Shift+Enter触发数组计算
- 把D2单元格的公式向下拖拽到和姓名列行数一致的位置即可,后续只要B列输入
P,对应姓名就会自动出现在D列的汇总区。
提示:公式里的
$A$2:$A$100替换为你实际的姓名列范围,$B$2:$B$100替换为你输入P的标记列范围。
方案2:VBA自动触发(无需手动拉公式,自动更新)
- 按
Alt+F11打开VBA编辑器,在左侧项目栏双击你要设置规则的工作表,打开代码输入窗口 - 粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 可自定义以下三列的列号,A=1 B=2 C=3 以此类推 Const NAME_COL As Integer = 1 ' 姓名列 Const MARK_COL As Integer = 2 ' 标记P的列 Const OUTPUT_COL As Integer = 4 ' 输出汇总列 Dim lastRow As Long, i As Long, outputRow As Long ' 仅修改标记列时触发规则 If Target.Column <> MARK_COL Then Exit Sub outputRow = 1 Columns(OUTPUT_COL).ClearContents lastRow = Cells(Rows.Count, NAME_COL).End(xlUp).Row For i = 2 To lastRow If UCase(Cells(i, MARK_COL).Value) = "P" Then Cells(outputRow, OUTPUT_COL).Value = Cells(i, NAME_COL).Value outputRow = outputRow + 1 End If Next i End Sub
- 关闭VBA编辑器,把文件保存为
.xlsm格式即可生效,后续修改标记列的内容会自动更新汇总结果,P不区分大小写。
Google Sheets 实现方法
直接在第一个输出单元格输入以下公式即可,不需要下拉,匹配到的姓名会自动溢出:
=FILTER(A2:A,B2:B="P")
提示:如果需要不区分大小写匹配P,可以用
=FILTER(A2:A,UPPER(B2:B)="P")
内容的提问来源于stack exchange,提问作者LPF
相关产品推荐
相关产品推荐

