【问题标题】:Vba Concatenate multiple columns until blankVba连接多列直到空白
【发布时间】:2019-06-14 20:28:07
【问题描述】:

我正在尝试创建一个宏来连接多个列,直到找到一个空单元格,当它找到时应该将连接的文本放在第一个单元格中。 The image 展示了它应该如何工作。在这个例子中,我有从 B 到 M 的值,但它可能会有所不同。感谢您的帮助和时间!

【问题讨论】:

  • 不同行的列数也会不同吗?此外,B 列是否是获得最后一行值的好猜测?
  • 如果您的 Excel 版本具有 TEXTJOIN,则可以使用它。否则,您可以使用 UDF 版本 - 例如 here

标签: excel vba concatenation multiple-columns


【解决方案1】:

试一试,详情请参阅 cmets:

Option Explicit

Sub concatenateValues()

Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Sheet Name") '
Dim lRow As Long: lRow = ws.Cells(Rows.Count, 2).End(xlUp).Row 'get last row at column B
Dim lCol As Long: lCol = ws.Cells(1, Column.Count).End(xlToLeft).Column 'get last column at row 1, assuming you have at least headers

Dim arrData As Variant: arrData = ws.Range(ws.Cells(1, 1), ws.Cells(lRow, lCol)) 'declare and allocate your data to an array

Dim R As Long, C As Long

For R = LBound(arrData) + 1 To UBound(arrData) 'for each row in your data, start at row 2
    For C = LBound(arrData, 2) + 1 To UBound(arrData, 2) 'for each column in your data, start at column 2
        arrData(R, 1) = arrData(R, 1) & arrData(R, C) 'concatenate the values
    Next C
Next R

ws.Range(ws.Cells(1, 1), ws.Cells(lRow, lCol)) = arrData 'put the values back into the sheet

End Sub

【讨论】:

    【解决方案2】:

    这是一个 VBA 解决方案。我假设第二列总是有一个值。

    Sub Concat()
    Dim i As Integer, Sht As Worksheet, Str As String
    i = 3
    Set Sht = ThisWorkbook.Sheets(1) 'Change this to whatever sheet you're using
    Str = Sht.Cells(1, 2).Value
    Do Until Sht.Cells(1, i).Value = ""
        Str = Str & "-" & Sht.Cells(1, i).Value
        i = i + 1
    Loop
    Sht.Cells(1, 1).Value = Str
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      相关资源
      最近更新 更多