连接数组

CONCATENATE array

我想连接一些列,它们之间必须有这个。 “;\” 问题是不同的行有不同数量的列。例如:

      A             B             C

1  Image1.jpg     Image2.jpg    Image3.jpg
2  Image1.jpg     Image2.jpg
3  Image1.jpg  

如果我连接三列,第三列将如下所示Image1.jpg;\;\

是否可以选择仅在不为空时才连接列?

也许:

=IF(B1="",A1,IF(C1="",A1&";\"&B1,A1&";\"&B1&";\"&C1))  

如果您有很多列,您最好的选择可能是首先接受最后的盈余,然后单独 trim 将其关闭。


一次最多 10 个(中间没有空格),但分两步进行:

  1. =A1&";\"&B1&";\"&C1&";\"&D1&";\"&E1&";\"&F1&";\"&G1&";\"&H1&";\"&I1&";\ "&J1&";\" 说 K1 并向下复制以适应,然后 select ColumnK,复制,选择性粘贴,值在上面。
  2. =LEFT(K1,LEN(K1)-2*(COUNTBLANK(A1:J1)+1)) 在 L1 中并向下复制以适应。

我假设包含数据的列是 A、B 和 C。

在 D 列中添加以下公式:

=IF(A1="",IF(B1="","",B1),IF(B1="",A1,A1&";\"&B1))

在E列添加以下公式得到最终结果:

=IF(D1="",IF(C1="","",C1),IF(C1="",D1,D1&";\"&C1))

一次性公式:

=IF(IF(A1="",IF(B1="","",B1),IF(B1="",A1,A1&";\"&B1))="",IF(C1="","",C1),IF(C1="",IF(A1="",IF(B1="","",B1),IF(B1="",A1,A1&";\"&B1)),IF(A1="",IF(B1="","",B1),IF(B1="",A1,A1&";\"&B1))&";\"&C1))

对于三列(2 的 3 次方),我们正在处理 8 种可能的值组合是否为空。上述 IF 语句反映了该逻辑。我会亲自写一个 VBA 函数,而不是使用这么冗长的公式。

这是一个基于VBA的解决方案。在标准模块中输入以下UDF

Option Explicit

Public Function Konkatenate(rIn As Range) As String
    Dim r As Range, s As String
    For Each r In rIn
        s = r.Text
        If s <> "" Then
            Konkatenate = Konkatenate & ";\" & s
        End If
    Next r
    Konkatenate = Mid(Konkatenate, 3)
End Function

用户定义函数 (UDF) 非常易于安装和使用:

  1. ALT-F11 调出 VBE window
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE window

如果您保存工作簿,UDF 将随之保存。 如果您使用的 Excel 版本晚于 2003,则必须保存 文件为 .xlsm 而不是 .xlsx

删除 UDF:

  1. 如上所述调出 VBE window
  2. 清除代码
  3. 关闭 VBE window

要使用来自 Excel 的 UDF:

=连接(A1:Z1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能运行!