连接数组
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 个(中间没有空格),但分两步进行:
=A1&";\"&B1&";\"&C1&";\"&D1&";\"&E1&";\"&F1&";\"&G1&";\"&H1&";\"&I1&";\ "&J1&";\"
说 K1 并向下复制以适应,然后 select ColumnK,复制,选择性粘贴,值在上面。
=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) 非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I
ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,UDF 将随之保存。
如果您使用的 Excel 版本晚于 2003,则必须保存
文件为 .xlsm 而不是 .xlsx
删除 UDF:
- 如上所述调出 VBE window
- 清除代码
- 关闭 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
必须启用宏才能运行!
我想连接一些列,它们之间必须有这个。 “;\” 问题是不同的行有不同数量的列。例如:
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 个(中间没有空格),但分两步进行:
=A1&";\"&B1&";\"&C1&";\"&D1&";\"&E1&";\"&F1&";\"&G1&";\"&H1&";\"&I1&";\ "&J1&";\"
说 K1 并向下复制以适应,然后 select ColumnK,复制,选择性粘贴,值在上面。=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) 非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,UDF 将随之保存。 如果您使用的 Excel 版本晚于 2003,则必须保存 文件为 .xlsm 而不是 .xlsx
删除 UDF:
- 如上所述调出 VBE window
- 清除代码
- 关闭 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
必须启用宏才能运行!