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 是:
- (第3列中与第2列中相应行不匹配的行数) + (如果第2列为空,第3列中与第1列中相应行不匹配的行数)
- 而且我也不想计算第三列中的空白。
在这种情况下 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)
FILTER
通过匹配条件 *
for AND +
for OR.
ROWS
计数行数
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))
假设我们在 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 是:
- (第3列中与第2列中相应行不匹配的行数) + (如果第2列为空,第3列中与第1列中相应行不匹配的行数)
- 而且我也不想计算第三列中的空白。
在这种情况下 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)
FILTER
通过匹配条件*
for AND+
for OR.ROWS
计数行数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))