CONCATENATE数组

时间:2015-01-21 15:08:36

标签: arrays excel concatenation

我想要收集一些列,在它们之间必须有这个。 “\” 问题是不同的行具有不同的列数。例如:

      A             B             C

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

如果我连接三列,则第三列将显示为Image1.jpg;\;\

是否可以选择在列不为空的情况下使用CONCATENATE列?

3 个答案:

答案 0 :(得分:1)

也许:

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

如果你有很多列,你最好的选择可能是在第一次结束时接受剩余,并分别将其修剪掉。


一次最多10个(没有干预空白),但分两步:

  1. =A1&";\"&B1&";\"&C1&";\"&D1&";\"&E1&";\"&F1&";\"&G1&";\"&H1&";\"&I1&";\ "&J1&";\"在说K1并向下复制以适应,然后选择ColumnK,Copy,Paste Special,Values over the top。
  2. 在L1中
  3. =LEFT(K1,LEN(K1)-2*(COUNTBLANK(A1:J1)+1))并将其复制到适合的地方。

答案 1 :(得分:1)

我假设包含数据的列是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))

我们正在处理8个可能的值组合,这些值是空白或不是三列(2到3的幂)。上述IF语句反映了这种逻辑。我个人会写一个VBA函数,而不是使用这么长的公式。

答案 2 :(得分:1)

这是一个基于 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窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = Konkatenate(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

      必须启用宏才能使其生效!

      enter image description here