基于每日输入表更新主表:公式或VBA统计需求咨询
解决方案
方案1:纯公式实现(仅适用于输入表保留历史数据)
如果你的输入表会按日期留存每日的表情录入数据(比如每日数据存放在独立行/区域),可以用Excel动态数组函数生成自动扩展的统计表格:
- 假设输入表命名为
输入表,A列是录入日期,每行对应当日的M28:O30表情数据 - 主表A2单元格输入公式生成唯一日期序列:
=UNIQUE(输入表!A2:A100) - 主表B2单元格统计当日
:)数量:=BYROW(A2#, LAMBDA(date, COUNTIFS(输入表!A:A, date, 输入表!M:O, ":)"))) - 主表C2单元格统计当日
:(数量:=BYROW(A2#, LAMBDA(date, COUNTIFS(输入表!A:A, date, 输入表!M:O, ":(")))
当输入表新增日期行时,主表统计行会自动扩展。
方案2:VBA代码实现(适用于输入表每日覆盖更新)
如果输入表每日的表情数据会被覆盖(当日录入后次日替换),纯公式无法留存历史统计,必须用VBA自动追加数据到主表:
步骤1:添加VBA模块
- 按
Alt + F11打开VBA编辑器 - 右键点击目标工作簿 → 插入 → 模块
- 粘贴以下代码:
Sub 每日满意度统计() Dim wsInput As Worksheet, wsMain As Worksheet Dim smileCount As Integer, sadCount As Integer Dim lastRow As Long ' 替换为你的实际工作表名称 Set wsInput = ThisWorkbook.Worksheets("输入表") Set wsMain = ThisWorkbook.Worksheets("主表") ' 统计表情数量 smileCount = Application.CountIf(wsInput.Range("M28:O30"), ":)") sadCount = Application.CountIf(wsInput.Range("M28:O30"), ":(") ' 定位主表下一个空行 lastRow = wsMain.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' 写入当日数据 With wsMain .Cells(lastRow, 1).Value = Date .Cells(lastRow, 1).NumberFormat = "yyyy/mm/dd" .Cells(lastRow, 2).Value = smileCount .Cells(lastRow, 3).Value = sadCount End With MsgBox "当日统计已保存至主表", vbInformation End Sub
步骤2:设置自动触发(可选)
若需要自动执行,可在工作表对象中添加触发代码:
- 双击
输入表的工作表对象(VBA编辑器左侧),粘贴以下代码:
' 打开工作簿时自动执行,避免重复添加当日记录 Private Sub Workbook_Open() Dim wsMain As Worksheet Set wsMain = ThisWorkbook.Worksheets("主表") If wsMain.Columns(1).Find(Date, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then 每日满意度统计 End If End Sub ' 输入表M28:O30区域修改时自动执行,仅当日无记录时添加 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("M28:O30")) Is Nothing Then Dim wsMain As Worksheet Set wsMain = ThisWorkbook.Worksheets("主表") If wsMain.Columns(1).Find(Date, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then 每日满意度统计 End If End If End Sub
使用注意:
- 确保主表A1、B1、C1已设置表头:
日期、笑脸数量、哭脸数量 - 代码中工作表名称需与你的实际表名一致
- 手动执行可通过「开发工具」→「宏」选择
每日满意度统计运行
内容的提问来源于stack exchange,提问作者Kris_Toor
相关产品推荐
相关产品推荐

