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

Google Sheets自定义函数需求:实现条件计数的参数化调用

Google Sheets 多条件动态统计方案

一、直接改公式(最快上手)

不用搞复杂的宏或函数,直接把硬编码的条件换成单元格引用就行:

  1. 在Sheet2的C1、C2、C3分别输入m003、m001、P165,D1输入1(对应原公式里B列的条件)
  2. 把原公式改成下面这样,用&把通配符和单元格内容拼起来:
=(COUNTIFS('Sheet 1'!A:A;"*"&C1&"*";'Sheet 1'!A:A;"*"&C2&"*";'Sheet 1'!A:A;"*"&C3&"*";'Sheet 1'!B:B;D1))/(COUNTIFS('Sheet 1'!A:A;"*"&C2&"*";'Sheet 1'!A:A;"*"&C3&"*"))

之后只要修改C1-C3、D1的内容,公式会自动更新计算结果。

二、自定义函数(灵活适配多条件)

如果需要随时加/减A列的筛选条件,可以写个自定义函数:

  1. 打开Google Sheets的「工具」→「脚本编辑器」,粘贴下面的代码:
function DYNAMICCOUNT(criteriaArray, bColumnCriteria, dataSheetName) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSheetName || 'Sheet 1');
  const data = sheet.getDataRange().getValues();
  
  let numerator = 0;
  let denominator = 0;
  const partialCriteria = criteriaArray.slice(1); // 去掉第一个A列条件,用于分母统计
  
  for (let row of data) {
    const aCell = row[0].toString();
    const bCell = row[1];
    
    const meetsAllACriteria = criteriaArray.every(crit => aCell.includes(crit));
    const meetsPartialACriteria = partialCriteria.every(crit => aCell.includes(crit));
    
    if (meetsAllACriteria && bCell === bColumnCriteria) numerator++;
    if (meetsPartialACriteria) denominator++;
  }
  
  return denominator === 0 ? 0 : numerator / denominator;
}
  1. 回到Sheet2,在任意单元格输入调用公式,比如:
=DYNAMICCOUNT(C1:C3, D1, "Sheet 1")
  • C1:C3是你要筛选的A列条件列表(比如m003、m001、P165)
  • D1是B列的条件(比如1)
  • 第三个参数是数据工作表名称,可选,默认是Sheet1
    如果分母为0,函数会返回0,避免出现错误值。

三、宏按钮(适合纯点击操作)

要是不想碰公式,整个按钮点一下就计算:

  1. 同样打开脚本编辑器,粘贴这段宏代码:
function runDynamicCount() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const inputSheet = ss.getSheetByName('Sheet 2');
  const dataSheet = ss.getSheetByName('Sheet 1');
  
  // 条件存在Sheet2的C1、C2、C3、D1,可根据自己需求改单元格位置
  const criteria1 = inputSheet.getRange('C1').getValue();
  const criteria2 = inputSheet.getRange('C2').getValue();
  const criteria3 = inputSheet.getRange('C3').getValue();
  const bCriteria = inputSheet.getRange('D1').getValue();
  
  const data = dataSheet.getDataRange().getValues();
  let numerator = 0;
  let denominator = 0;
  
  for (let row of data) {
    const aCell = row[0].toString();
    const bCell = row[1];
    
    const hasAll = aCell.includes(criteria1) && aCell.includes(criteria2) && aCell.includes(criteria3);
    const hasPartial = aCell.includes(criteria2) && aCell.includes(criteria3);
    
    if (hasAll && bCell === bCriteria) numerator++;
    if (hasPartial) denominator++;
  }
  
  // 结果输出到Sheet2的E1单元格,可自行修改位置
  inputSheet.getRange('E1').setValue(denominator === 0 ? 0 : numerator / denominator);
}
  1. 回到Sheet2,点击「插入」→「绘图」,画个按钮(比如矩形加文字“计算”),右键这个按钮→「分配脚本」,输入runDynamicCount。
    之后只要在C1-C3、D1输入条件,点按钮就能自动把结果放到E1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:48:51