生成以逗号分隔的单元格内容列表,不包括空格

Isz*_*szi 9 worksheet-function microsoft-excel microsoft-excel-2010

要连接某个四个单元格,我会使用:

=CONCATENATE(A2,",",C2",",D2,",",F2)
Run Code Online (Sandbox Code Playgroud)

这将使...

  • A2 = "马修"
  • C2 = "标记"
  • D2 = "卢克"
  • F2 = "约翰"

会导致Matthew,Mark,Luke,John.

但是我们遇到了类似的问题......

  • A2 = "耶稣"
  • C2 = ""
  • D2 = "玛丽"
  • F2 = "约瑟夫"

这将导致Jesus,,Mary,Joseph.

在这里,不需要额外的逗号。有没有办法优雅地处理这个问题,以便所有非空白单元格都包含在逗号分隔列表中,同时避免在某些单元格为空白时添加不必要的逗号?

当然,这可以通过相当数量的嵌套 IF 来完成,但如果可能的话,我真的想避免这种情况。可以使用本机 Excel 函数或数组公式来完成吗?或者人们必须诉诸VB Script来做这样的事情吗?

小智 12

在 Excel 2016 中,您可以使用TEXTJOIN

=TEXTJOIN(delimiter,ignore_blanks?,values_to_be_joined)
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,你会使用这个公式:

=TEXTJOIN(",",TRUE,A2,C2,D2,F2)
Run Code Online (Sandbox Code Playgroud)


Dok*_*ard 5

正如你所说,嵌套 IF 不是你的菜,但如果没有@nixda 指出的 VBA 解决方案,我看不出有任何其他方法可以做到这一点。

对于我提出的解决方案,我假设您的数据如下所示:

 |    A    |
-+---------+
1| Matthew |
2| Mark    |
3| Luke    |
4| John    |
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,可以满足您的要求,但被“埋葬”了。在阅读了您在最近的回答中留下的评论(特别是关于您总是填充第一个单元格这一事实的评论)后,我明白了这一点。这允许不存在嵌套,因为第一个条件(在下面的推理中)总是错误的。

=CONCATENATE(A1;IF(ISBLANK(A2);"";"," & A2);IF(ISBLANK(A3);"";"," & A3);IF(ISBLANK(A4);"";"," & A4))
Run Code Online (Sandbox Code Playgroud)

CONCATENATE正如@Scott 在回答中指出的那样,您始终可以删除公式并用与号替换公式。在这一点上,它只是一个外观问题。

=A1 & IF(ISBLANK(A2);"";"," & A2) & IF(ISBLANK(A3);"";"," & A3) & IF(ISBLANK(A4);"";"," & A4)

第一个值总是被写入,所以唯一需要的是检查活动单元格是否为空白,如果不是,则在其后面添加一个逗号。

这样你就不需要任何辅助单元,它都在一个函数中。

我还写了一个更详细的版本,因为我假设了通用术语(即可能存在您没有填充第一个单元格的情况)。它只需要2层嵌套,因为最多需要检查3个条件:

  • 活动单元格之前的单元格是否为空?
  • 活动单元格是否为空?
  • 以上都不是真的吗?(默认条件)

假设您从头开始推理,所需的格式如下:

  • 如果是,则不要在单元格数据前放置逗号。如果没有,继续。
  • 如果是,则不要放置任何东西(另一种解决方案是放置单元格)。
  • 如果没有为真,则在单元格数据后面放置一个逗号。

因此,这是我使用的公式。我假设所有数据都在一列中,在一行中使用更改一些公式和范围。

=CONCATENATE(A1;IF(ROWS(A1:A1)=COUNTBLANK(A1:A1);A2; IF(ISBLANK(A2);"";"," & A2));IF(ROWS(A1:A2)=COUNTBLANK(A1:A2);A3; IF(ISBLANK(A3);"";"," & A3));IF(ROWS(A1:A3)=COUNTBLANK(A1:A3);A4; IF(ISBLANK(A4);"";"," & A4)))
Run Code Online (Sandbox Code Playgroud)

ROWS计算任何给定间隔中的行数。如果它等于活动单元格后面的空白单元格数,则表示活动单元格后面的所有单元格都是空白的,因此前面不应放置逗号。

ROWSCOUNTBLANK中的间隔是活动单元格后面的单元格。