MS Excel – 带分隔符的Concat
我有一个很长的数字电子表格。
我需要把它们放在一个由…分隔的string中; 例如。 4364453; 24332432; 2342432
我知道我可以这样做:
=concat(A1:A2000)
但这将合并在一个string没有分隔符 – 我似乎无法find一个分隔符的选项,当你指定一个范围。
谢谢
使用TEXTJOIN()代替:
=TEXTJOIN(";",TRUE,A1:A2000)
对于那些没有OFFICE 365 Excel的用户,则使用这个模拟TEXTJOIN函数的UDF。
把它放在一个连接到工作簿的模块中,并使用上面的公式调用。
Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN2 = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function
如果你像我一样,你的工作电脑有一个旧版本的没有TEXTJOIN的Excel,你可以使用一个macros。 这是我嘲笑的东西,可以做单列或单行。 只要点击你想要放置的结果string的位置,然后运行macros。
请注意,这将只处理一行或一列,就像你的示例数据。 如果你想要连接A1:C3,你需要不同的逻辑。
Sub ConcatenateRange() Dim resultCell As Range Set resultCell = Selection Dim concatRange As Range Set concatRange = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) Dim optionalSeparator As String optionalSeparator = Chr(34) & InputBox("Any Separator?") & Chr(34) Dim outputString As String outputString = "=TRIM(CONCATENATE(" Dim rangeSize As Integer rangeSize = concatRange.Columns.count + concatRange.Rows.count For Each item In concatRange outputString = outputString & item.Address(RowAbsolute:=False, ColumnAbsolute:=False) rangeSize = rangeSize - 1 If (rangeSize > 1) Then outputString = outputString & ", " & optionalSeparator & ", " Else outputString = outputString & "))" End If Next resultCell.formula = outputString End Sub