LibreOffice Calc:需要公式来查找表中具有特定值的所有单元格

LibreOffice Calc:需要公式来查找表中具有特定值的所有单元格

假设我的第一个表格如下所示:

遥控 A C
1 X o C
2 X
3 o X

我想要第一个文档中的第二个表格,如下所示:

遥控 A C
1 “x” 的出现次数 A1 B2 B3
2 “o” 的出现 A3 B1
3 “c” 的出现次数 C1

有没有一种使用公式来实现此目的的优雅方法?我知道我总是必须指定最大出现次数,并在第二张表的一行中保留那么多单元格。

我已经设法为表 2 整理了一些公式:

B1 = =IF(NOT(ISNA(MATCH("x";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("x";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("x";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("x";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("x";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("x";$Table1.$C$1:$Table1.$C$3;0)))))

B2 = =IF(NOT(ISNA(MATCH("o";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("o";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("o";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("o";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("o";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("o";$Table1.$C$1:$Table1.$C$3;0)))))

B3 = =IF(NOT(ISNA(MATCH("c";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("c";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("c";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("c";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("c";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("c";$Table1.$C$1:$Table1.$C$3;0)))))

我确信我可以为其余部分制定出类似的东西,但是这些公式变得越来越庞大,如果我需要改变一些东西,它们会让我发疯,所以我想知道是否有更优雅的方法来做到这一点。

编辑:另外,如果更容易实现的话,让 table2 看起来像这样也很好:

遥控 A
1 “x” 的出现次数 A1,B2,B3
2 “o” 的出现 A3,B1
3 “c” 的出现次数 C1

答案1

首先,让自己和 Calc 更轻松 - 从单元格中删除“出现次数”字样,只留下所需的值(x、o、c 等)。如果您需要这个词来增加美感,您可以使用自定义格式在单元格中显示它Occurences of \"@\"

现在将原始范围内的所有单元格与第一列中的值进行比较。如果值不匹配,则使用空字符串。否则,使用 ADDRESS() 函数获取单元格的坐标。将结果与 TEXTJOIN() 合并,不要忘记这是一个数组公式,使用以下公式完成公式Ctrl+Shift+Enter

{=TEXTJOIN(",";1;IF(Sheet1.$A$1:$C$3=$A1;ADDRESS(ROW(Sheet1.$A$1:$C$3);COLUMN(Sheet1.$A$1:$C$3);4;1);""))}

结果

相关内容