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

Google Sheets中按特定条件统计唯一日期数的方法求助

统计符合条件的唯一日期数量的解决方法

以下是几种可行的实现方式,解决你遇到的公式和脚本失效问题:

方法1:使用COUNTUNIQUEIFS函数(最简方案)

这是Google Sheets中专门用于统计满足多条件的唯一值数量的函数,直接匹配你的需求:

=COUNTUNIQUEIFS(A:A, D:D, B:B)

如果需要限定数据范围(比如仅处理A2到D9的行),可以写成:

=COUNTUNIQUEIFS(A2:A9, D2:D9, B2:B9)

这个公式会直接返回「D列=B列」条件下,A列的唯一日期总数。

方法2:修正QUERY公式

你之前的QUERY公式错误地引用了E列(实际应该是D列),若要统计唯一日期数,需使用count(distinct A):

=QUERY(A2:D9, "select count(distinct A) where D = B label count(distinct A) ''")

如果需要按日期分组,显示每个日期对应的符合条件的记录数,修正条件后的公式为:

=QUERY(A2:D9, "select A, count(A) where D = B group by A")

方法3:高效的Apps Script实现

避免低效的逐行循环,改用批量数据处理的方式,同时正确处理日期去重:

function countQualifiedUniqueDates() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // 无数据时直接返回
  
  // 批量读取A2到D列的所有数据
  const data = sheet.getRange(2, 1, lastRow - 1, 4).getValues();
  
  // 统计唯一日期总数
  const uniqueDateSet = new Set();
  data.forEach(row => {
    const [date, campaignName, , budget] = row;
    if (budget === campaignName) {
      // 将日期转为字符串,确保Set能正确去重(日期对象是引用类型)
      uniqueDateSet.add(date.toISOString().split('T')[0]);
    }
  });
  
  // 将结果写入E2单元格(总唯一日期数)
  sheet.getRange(2, 5).setValue(uniqueDateSet.size);

  // 可选:如果需要列出每个日期及对应符合条件的记录数
  const dateCountMap = {};
  data.forEach(row => {
    const [date, campaignName, , budget] = row;
    if (budget === campaignName) {
      const dateStr = date.toISOString().split('T')[0];
      dateCountMap[dateStr] = (dateCountMap[dateStr] || 0) + 1;
    }
  });
  // 转换为可写入表格的格式,写入E2开始的区域
  const resultRows = Object.entries(dateCountMap).map(([dateStr, count]) => [new Date(dateStr), count]);
  if (resultRows.length > 0) {
    sheet.getRange(2, 5, resultRows.length, 2).setValues(resultRows);
  }
}

脚本说明:

  • 批量读取数据比逐行读取效率高很多
  • 用Set处理日期去重时,必须将日期对象转为字符串(否则不同的日期对象会被视为不同值)
  • 可选逻辑支持输出每个日期的对应记录数

内容的提问来源于stack exchange,提问作者Laira Reeba Joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:36:35