【问题标题】:Formula to return value if all non-empty values are same, else return empty?如果所有非空值都相同,则返回值的公式,否则返回空?
【发布时间】:2019-12-23 17:47:38
【问题描述】:

我有一个 Google 表格,其中包含许多(很多、很多)以下情况:

  A    B    C    D    E
1 a    b1             e1
2 a                   
3      b2        d    e2
4 a                   e2

基本上每一行都列出了从不同位置抓取的内容(有关研究论文的信息);从理论上讲,每一行中的值应该是相同的,但是由于某些位置缺少某些信息,并且有时信息会以一些次要(但可能很重要)的方式有所不同,因此始终没有 100% 一致。

如果该列中的所有非空值都相同,我希望这样一个组下面的每个单元格都显示一个值,如果非空值之间存在一些差异,则不显示任何内容。请参阅下面的第 5 行:

  A    B    C    D    E
1 a    b1             e1
2 a                   
3      b2        d    e2
4 a                   e2

5 a              d     

这基本上是第一次程序化清理,以协助进一步的体力劳动(这是不可避免的)。

有一个示例表available here - 真实的东西大约有 18 组值(标题、作者、ISBN、出版物、URL、关键字等)和 270 列(每列用于另一个出版物)。底部的橙色行只是手动粘贴的,但显示了我想通过公式在蓝色行中获取的值。

我意识到这可以通过大量的 IF 字符串来完成,但是......肯定有一种方法可以编写一个公式,该公式将从一个数组或一组单元格中提取所有非空值,并将它们与如果它们都相等,则返回一个值?

不幸的是,我正在画一个空白......

【问题讨论】:

  • 能否分享一份您的电子表格。您对如何呈现数据以及用于开发成功结果的逻辑的解释缺乏。您已经描述了“许多、许多等”案例,但您还没有描述它们在电子表格中的布局方式;每个案例是否是单独的工作表,是否有多个电子表格和多个工作表,是否有很多行并且每个“组”由一个空白行分隔;是否将解决方案插入“the”空白行;是否需要新的空白行。
  • @Tedinoz 希望我作为链接添加的电子表格示例可以作为解释!

标签: if-statement google-sheets filter google-sheets-formula distinct-values


【解决方案1】:

这肯定不是最佳解决方案,但它确实有效

=IF(COUNTIF(A1:A7,first_non_empty_cell)=COUNTA(A1:A7),first_non_empty_cell,"")

您可以考虑将first_non_empty_cell 替换为 LOWER(INDEX(A1:A7,MATCH(1,INDEX((A1:A7<>0),0),0))) 或使用包含您要用于比较的值的单元格。

【讨论】:

  • 谢谢,但这似乎不起作用...?它似乎总是返回一个空值。
【解决方案2】:

Countunique 应该可以工作:

=if(countunique(A1:A4)=1,sortn(A1:A4,1),"")

我使用 sortn 是因为我想在显示应该是单个非空值之前从值列表中删除任何空单元格,这是一种方法(空单元格被排序到最后所以赢了'不出现)。

编辑

如果数据包含#N/A,那么处理它们的最短方法可能是使用(对我来说有点晦涩的)函数 countuniqueifs

=if(countuniqueifs(A1:A4,A1:A4,"<>#N/A")=1,sortn(A1:A4,1),"")

空白单元格和#N/A 仍然排在其他所有内容之后,所以我认为 sortn 部分应该仍然有效。

但这还有一个问题 - 如果范围包含从公式返回的空字符串,则 sortn 部分将无法正常工作,因此必须依靠过滤:

=if(countuniqueifs(C1:C4,C1:C4,"<>#N/A",C1:C4,"<>")=1,filter(C1:C4,C1:C4<>"#N/A",C1:C4<>""),"")

【讨论】:

  • 这比我接受的解决方案更优雅,但它似乎无法处理值中潜在的#N/As(我意识到事后将是一个不错的福利)。但是,将来我可能会最终使用这种方法,因为我可以使用更简单的公式。谢谢!
  • 直到现在我才意识到有一个 countuniqueifs 可以处理#N/A's - 将添加到我的答案中。
【解决方案3】:
=IFERROR(IF(COUNTA(UNIQUE(FILTER(B2:B5, B2:B5<>"", B2:B5<>"#N/A")))>1, ,
 UNIQUE(FILTER(B2:B5, B2:B5<>"", B2:B5<>"#N/A"))))

或更短:

=IF(COUNTUNIQUE(FILTER(D2:D5, D2:D5<>"", D2:D5<>"#N/A"))>1, ,
 UNIQUE(FILTER(D2:D5, D2:D5<>"", D2:D5<>"#N/A")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多