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

求助Google Sheets公式:识别会员ID最新扫描并关联进出状态

会员进出状态自动更新解决方案

公式实现方案(无需脚本)

适合你目前对公式有基础的情况,核心逻辑是通过统计会员ID的扫描次数,奇数次标记为In,偶数次标记为Out(首次扫描默认进入)。

在会员列表的D列(比如D2单元格)输入以下公式,下拉填充即可:

=IF(ISBLANK(A2), "",
  LET(
    id_scans, FILTER('扫描记录'!B:B, '扫描记录'!A:A = A2),
    scan_count, COUNTA(id_scans),
    IF(scan_count = 0, "未扫描", IF(MOD(scan_count, 2) = 1, "In", "Out"))
  )
)

公式说明:

  • FILTER:筛选出当前会员ID的所有扫描时间戳
  • COUNTA:统计该ID的扫描总次数
  • MOD:判断次数奇偶性,奇数对应进入状态,偶数对应离开状态
  • ISBLANK:处理空ID的情况,避免显示错误

脚本实现方案(自动更新)

如果需要每次扫描ID后自动切换状态,可使用Google Apps Script实现自动触发:

  1. 打开你的Google表格,点击「扩展程序」→「Apps脚本」
  2. 粘贴以下代码(注意修改标签页名称为你实际使用的名称):
function onEdit(e) {
  const scanSheet = e.source.getActiveSheet();
  // 替换为你的扫描记录标签页名称
  if (scanSheet.getName() !== "扫描记录") return;
  
  const editedRow = e.range.getRow();
  const memberId = scanSheet.getRange(editedRow, 1).getValue();
  if (!memberId) return;
  
  // 替换为你的会员列表标签页名称
  const memberSheet = e.source.getSheetByName("会员列表");
  const idList = memberSheet.getRange("A:A").getValues();
  
  // 查找匹配的会员并切换状态
  for (let i = 0; i < idList.length; i++) {
    if (idList[i][0] === memberId) {
      const statusCell = memberSheet.getRange(i + 1, 4);
      const currentStatus = statusCell.getValue();
      statusCell.setValue(currentStatus === "In" ? "Out" : "In");
      break;
    }
  }
}
  1. 保存脚本,授权必要的权限(首次运行会提示权限申请,按照引导完成即可)

脚本说明:

  • 当「扫描记录」标签页新增或编辑ID时,自动触发脚本
  • 匹配会员列表中的对应ID,切换其D列的In/Out状态
  • 若会员之前无状态记录,默认设置为In

注意事项:

  • 公式方案在数据量较大时可能有轻微延迟,刷新页面即可同步
  • 脚本方案需确保标签页名称与代码中一致,否则无法触发
  • 若扫描记录存在重复的同一ID+时间戳,建议先清理数据,避免计数或状态切换错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:42:51