【问题标题】:How to concatenate multiple cells (only if cell is not blank) with delimiter? [duplicate]如何使用分隔符连接多个单元格(仅当单元格不为空白时)? [复制]
【发布时间】:2019-12-25 01:52:07
【问题描述】:

我正在尝试在每个单元格之间使用分隔符“,”连接 6 个单元格,但同时忽略空白单元格。我用这个问题来帮助我:How to Concatenate multiple columns if not empty

问题:

我遇到了分隔符出现在连接文本末尾的问题。所以我用 LEFT 和 LEN 去掉了多余的字符。有没有办法在 VBA 中解决这个问题而不在公式中使用 LEFT 和 LEN?

VBA 代码:

Function Concat(ConcatArea As Range) As String
    For Each x In ConcatArea: xx = IIf(x = "", xx & "", xx & x & ", "): Next
    Concat = Left(xx, Len(xx) - 1)
End Function

公式:

=LEFT(Concat(Temp[@[En00]:[En05]]),LEN(Concat(Temp[@[En00]:[En05]]))-1)

解决方案:

@AndreasAlun Rowe's resource 的帮助下,我能够使用不同的UDF。 UDF 似乎模拟了 TEXTJOIN 函数(仅在 Office 365/2019 中可用):

Function IMPLODE(Rng As Range, Sep As String)
    Dim TEMP As String
    For Each Cell In Rng
        If Cell.Value = "" Then
        Else
            TEMP = TEMP & Cell.Value & Sep
        End If
    Next Cell
    TEMP = Left(TEMP, Len(TEMP) - Len(Sep))
    IMPLODE = TEMP
End Function

【问题讨论】:

  • 我不确定发布的 excel 版本,但请检查您是否有 TEXTJOIN 功能。如果没有,如果您搜索,英雄Jeeped 有一个 UDF 可以做到这一点
  • 如果您没有 Office 365 Excel,这里是 TEXTJOIN() udf 的代码:stackoverflow.com/questions/39532189/…
  • 什么撕裂。他确实有一个很好的TEXTJOINudf。我记得当时我试图重新创建它以进行练习。
  • @urdearboy 不幸的是,Jeeped 似乎已经删除了他们的 SO 帐户,因此现在很难找到他们的帖子:/
  • 谢谢大家,我的工作使用的是 Office 2016,所以我没有 TEXTJOIN。我能够在 @AndreasAlun Rowe's resource 的帮助下修改我的 VBA。

标签: excel vba concatenation user-defined-functions textjoin


【解决方案1】:

您可以将 PHP 等效的 implode 函数用作 UDF。
原作者here.

Function IMPLODE(Rng As Range, Sep As String)
    Dim TEMP As String
    For Each Cell In Rng
        If Cell.Value = "" Then
        Else
            TEMP = TEMP & Cell.Value & Sep
        End If
    Next Cell
    TEMP = Left(TEMP, Len(TEMP) - Len(Sep))
    IMPLODE = TEMP
End Function

【讨论】:

  • 非常感谢您分享出色的资源并提供答案。这对我来说非常有效。
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多