我正在努力获取一个计算公式来进行以下计算:
A B D G H A
A B C 2 1
A D E 2 1
A F G 1 2
B H I 1 1
就像示例中那样,我需要公式来比较两个单元格,并告诉我它们有多少个共同元素 - 无需我说明这两个单元格中有哪些元素,尽管它们始终是字母表中的字母,并且任何给定的字母都不会在同一个单元格中重复 -。为了说明起见,示例分别比较了 B1 与 A2、A3、A4 和 A5,以及 C1 与 A2、A3、A4 和 A5。
关于如何使用 LibreOffice 实现这一点,您有什么想法吗?谢谢!
答案1
如果第 1 行单元格中始终有 3 个字母,则可以使用:
=IF(ISNUMBER(SEARCH(MID(B$1;1;1);$A2));1;0) + IF(ISNUMBER(SEARCH(MID(B$1;2;1);$A2));1;0) + IF(ISNUMBER(SEARCH(MID(B$1;3;1);$A2));1;0)
在单元格 B2 中复制/粘贴到其他单元格(用于修复列/行的 $ 已经在公式中)
有 3 个 IF,每个字母对应一个。如果找到该字母,结果为数字,IF 将其替换为 1,如果没有找到,则替换为 0,并将 3 个 IF 的结果相加。
如果某一列中有更多字母,则仅向该列的公式添加一个 IF。
第 1 列中的字母数量可以改变,而公式不会发生任何变化。
如果第 1 行的字母之间有空格,如A B D' instead of
ABD`,请将 MID 函数第 2 个参数中的 1、2 和 3 更改为 1、3 和 5。
答案2
如果第 1 行的单元格中始终有三个字母,则可以使用:
=SUM(--ISNUMBER(SEARCH(MID(B$1,{1,2,3},1),$A2)))
这是 laurent 答案的渐进式演化。我做了一些优化。首先,
IF (
Boolean_value
, 1 , 0)
有点多余,因为 TRUE 的值为 1,FALSE 的值为 0。布尔值可以通过前缀轻松转换为等效整数--
;缩写为- ( - (
value
) )
,这会保留数值,但会将类型强制为整数。然后是{1,2,3}
一个数组,使用SUM
函数可以消除添加三个几乎相同的项的需要。
要处理第 1 行中长度不同的字符串,请使用
=SUM(--ISNUMBER(SEARCH(MID(B$1,ROW(INDIRECT("1:"&LEN(B$1))),1),$A2)))
这类似于第一个答案,只不过我们获取了列顶部字符串的长度,LEN(B$1)
并将其连接到字符串“ 1:
”,形成类似“ 1:3
”的内容。这看起来像是行的范围,函数INDIRECT
就是这样处理的,返回地址范围$1:$3
。然后ROW()
返回数组{1,2,3}
。这是一个技巧,可以创建一个连续数字数组,其开头和结尾不是预先确定的。
Ctrl上面的公式必须用+ Shift+输入Enter。我不确定为什么必须这样,而第一个却不用。
您的示例/插图使字符串看起来像是嵌入了空格。如果这是真的(但您不想计算空格),则公式变为
=SUMPRODUCT(--(MID(B$1,ROW(INDIRECT("1:"&LEN(B$1))),1)<>" "),--ISNUMBER(SEARCH(MID(B$1,ROW(INDIRECT("1:"&LEN(B$1))),1),$A2)))
Ctrl也必须用+ Shift+输入Enter。