Google表格中带有COUNTIF的ARRAYFORMULA

时间:2020-06-01 04:35:42

标签: google-sheets google-sheets-formula

我们有一个Google表单,用户可以使用该表单提交他们的调查。同一用户可能多次提交调查问卷,此时我们只想考虑最新的答复而忽略所有先前的答复。该工作表有两个关键列(时间戳和电子邮件),并且我们创建了一个附加列“ Accepted”,该列应具有两个值“ 0”或“ 1”,其中不接受带有“ 0”的响应,而带有“ 1”的响应被接受(因为这是最新提交的回复)。

Timestamp | Email | Accepted
2020/06/01 00:05:22 | email1@domain.com | 0
2020/06/01 00:35:06 | email2@domain.com | 1
2020/06/01 01:45:51 | email1@domain.com | 1
2020/06/01 02:03:40 | email3@domain.com | 0
2020/06/01 03:44:01 | email3@domain.com | 1

Google表格的第一行包含标题。因此,在C2中输入的公式为:

=IF(COUNTIF($B$1:B2,B2)=COUNTIF($B$1:B,B2),1,0)

当拖动到所有行时效果最佳。但是,由于我们希望将C列更新为每个新的响应,因此请尝试使用ARRAYFORMULA,如下所示:

=ARRAYFORMULA(IF(COUNTIF($B$1:B2,B2:B)=COUNTIF($B$1:B,B2:B),1,0))

向所有行返回0。链接到示例Google表格的链接如下: https://docs.google.com/spreadsheets/d/1qAdOIV_ZioBw41UR_WEBR_Ean5tQ0Yd_f6oLRi83fOk/edit?usp=sharing

请帮助。在此先感谢:)

1 个答案:

答案 0 :(得分:1)

您可以通过在Google Apps脚本中创建的custom function来完成此操作。为此,请按照下列步骤操作:

  • 在电子表格中,选择工具>脚本编辑器以打开绑定到文件的脚本。
  • 在脚本编辑器中复制此函数,然后保存项目:
function GETLAST(input) {
  input = input.filter(row => row[1] !== ""); // Remove empty elements
  return input.map(row => { // Iterate through rows
    const responderRows = input.filter(el => el[1] === row[1]); // Filter by email address
    const isLast = responderRows.every(el => el[0] <= row[0]); // Check if it's last email
    return isLast ? 1 : 0
  });
}
  • 现在,如果您返回电子表格,则可以像使用任何内置功能一样使用此功能。您只需提供适当的范围(在这种情况下为A2:B),如您在此处看到的那样:

enter image description here

注意:

  • 此功能使用提交时间(列A)来查找每个电子邮件地址的最后提交。行顺序无关紧要。

参考: