我想知道 libreoffice calc 是否具有计算不相交单元格的条件平均值的功能。例如:如果 Row2 不包含 x,则计算 Row1 中每个第二个单元格的平均值。
| C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9
--------------------------------------------------
Row1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Row2 | x | x | | | | x | x | |
从 C1 开始,结果应该是:mean(3, 5, 9) = 5.666666 从 C2 开始,结果应该是:mean(4, 8) = 6
虽然有一个使用 IF 语句对每个单元格进行处理的解决方案,但我想知道是否有更方便的方法。我已经搜索了类似 LOOKUP 或 COUNTIF 的解决方案,但所有这些函数都需要一个连续的范围作为数据和条件的输入。
我希望有人能帮帮忙。
[编辑]:回答
我终于自己找到了解决方案。答案是SUMPRODUCT
除了另一行或MOD
函数之外还使用该函数:
=SUMPRODUCT(MOD(COLUMN(C1:C9), 2)=0, C1Row2:C9Row2<>"x", C1Row1:C9Row1)/SUMPRODUCT(MOD(COLUMN(C1:C9), 2)=0, C1Row2:C9Row2<>"x")
答案1
我终于自己找到了解决方案。答案是除了另一行或 MOD 函数之外还使用 SUMPRODUCT 函数:
=SUMPRODUCT(MOD(COLUMN(C1:C9), 2)=0, C1Row2:C9Row2<>"x", C1Row1:C9Row1)/SUMPRODUCT(MOD(COLUMN(C1:C9), 2)=0, C1Row2:C9Row2<>"x")
答案2
我无法立即访问 LibreOffice Calc。您可以使用函数AVERAGEIFS
和“辅助行”在 Microsoft Excel 中执行此操作。我选择了第 42 行。在单元格中A42
,输入=MOD(COLUMN(), 2)
,然后将其拖出/填写到(即,足够远以对应您的所有数据;在您的示例中,您显示了九I42
列)。这应该会给您一个交替的序列1
,,,,, …0
然后您想要的答案是1
0
=AVERAGEIFS(A1:I1, A2:I2, "<>x", A42:I42, 1)
A1:I1
即第 2 行的值不是“x”且第 42 行的值为 1 的数值的平均值。
你说的是“如果第 2 行不包含 x”。我将其解释为“如果第 2 行中的对应值不x
”。如果你的意思是“如果第 2 行中的对应值不包含an x
”(因此像“excel”和“fox”这样的词也会使第 1 行中的相应值无效),您可能需要第二个“辅助行”来处理这个问题。