Google 工作表:计算一列中与另一列中对应行不匹配的行数?

Google Sheets: Count number of rows in a column that do not match corresponding row in another column?

假设我们在 google 张表格中有以下电子表格:

a  a
b  b
c  
d  e
e  d

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

感谢您的帮助。

更新:

现在假设我有这个电子表格:

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

我如何在第三列的最后一个公式的基础上构建,其中值 returned 是:

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

试试这个:

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

=IFNA(ROWS(FILTER(A:B,
  (A:A<>B:B)*
  (B:B<>"")
)),0)
  1. FILTER 通过匹配条件 * for AND + for OR.
  2. ROWS 计数行数
  3. IFNA returns 0 如果没有找到。

QUERY

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

我看到有 2 种方法可以完成这个。

首先,如果值发生变化且不为空,则可以向 return 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;
}

对我来说,听起来你可以使用:

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