Google表格:计算某列中与另一列中的相应行不匹配的行数?

问题描述

说我们在Google表格中有以下电子表格:

a  a
b  b
c  
d  e
e  d

我将如何构建一个公式来计算B列中与A列中的对应行不匹配且不为空的行数?换句话说,我想获取在B列中更改为新字母的行数。因此在此示例中,公式应返回2。

谢谢您的帮助。

更新:

现在假设我有此电子表格:

a  a  
b  b  b
c     a
d  e  e
e  d  e

我如何在第三列的最后一个公式上构建,返回的值是:

  • (第3列中与第2列中的相应行不匹配的行数)+(如果第2列为空,则第3列中与第1列中的相应行不匹配的行数)
  • 而且我也不想在第三栏中空白。

在这种情况下返回的值应为2(第3行和第5行)。

解决方法

=IFNA(ROWS(FILTER(A:B,(A:A<>B:B)*
  (B:B<>"")
)),0)
  1. FILTER通过匹配条件*(对于AND)和+(对于OR)。
  2. ROWS对行进行计数
  3. 如果未找到任何内容,
  4. IFNA将返回0。

或带有QUERY

=INDEX(QUERY(A:B,"select count(B) where B<>A"),2)
,

在我看来,您可以使用:

=SUMPRODUCT((B:B<>"")*(B:B<>A:A))
,

尝试一下:

=ARRAYFORMULA(COUNTA($B$1:$B)-SUM(COUNTIFS($A$1:$A,$B$1:$B,"<>")))

result

,

我看到两种方法可以完成此操作。

首先,您可以向每行添加一个函数,以在值更改且不为空时返回1或0,然后对结果求和。不幸的是,这会在电子表格中添加一个混乱的列。

=if(A1<>IF(ISBLANK(B1),A1,B1),1,0)

第二,您可以创建一个函数,将范围作为字符串传递。 工作表中的调用将如下所示:

=myFunction("A1:B5")

然后通过打开“工具”->“脚本编辑器”来创建脚本,并使用类似的内容

function myFunction(r) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(r);
  var numRows = range.getNumRows();
  var areDifferent = 0;
  
  for (let i=1; i<= numRows; i++) {
    let currentValue = range.getCell(i,1).getValue();
    let cmpValue = range.getCell(i,2).getValue();
    if ((currentValue != cmpValue) && (cmpValue != "")) {
      areDifferent++;
    }
  }
  return areDifferent;
}