【问题标题】:Concatenate multiple cells in a column into one cell将一列中的多个单元格连接成一个单元格
【发布时间】:2019-02-25 20:54:46
【问题描述】:

我需要将多个单元格合并到一个单元格中的一列中。

数据存在于 A 列中:

0100
0800
ABCD
LMKQ
.
.
.

等等

单元格 B2 应具有以下值:

'0100'、'0800'、'ABCD'、'LMKQ'....等等

我的代码识别所有数据,但仅填充最后一个单元格中的数据:

Sub concatMyData()

    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        Cells(2, "B").Value = "'" & Cells(i, "A").Value & " '" & Cells(i + 1, "A").Value & "'"
    Next i

End Sub

【问题讨论】:

  • 如果你有 Excel 2016,你可以使用TEXTJOIN。 B2 中的以下公式应该可以完成这项工作:=CONCATENATE("'",TEXTJOIN("', '",TRUE,A2:A30),"'")
  • 我知道 excel 公式.. 但我需要 VBA 代码.. 需要将其作为更大脚本的一部分运行..
  • 好的,我已从您的问题中删除了“Excel 公式”标签

标签: excel vba


【解决方案1】:

检查一下:

Sub concatMyData()
    Dim first As Boolean
    first = True
    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Not first Then Cells(2, "B").Value = Cells(2, "B").Value & ", "
        Cells(2, "B").Value = Cells(2, "B").Value & "'" & Cells(i, "A").Value & "'"
        first = False
    Next i
End Sub

【讨论】:

  • 虽然这行得通,但效率非常低,不仅你在循环,而且你一遍又一遍地发布到工作表上。请参阅下面的代码,了解如何在不循环的情况下执行此操作,或者如果您坚持使用循环至少构建一个字符串变量,而不是在循环将变量发布到工作表之后一遍又一遍地更新工作表。你这样做的方式,如果你在工作表上有大量的计算,它会在每次循环运行时计算所有的公式。
【解决方案2】:

你可以用一行代码做到这一点,而不必循环(快得多):

Range("B2").Formula = "'" & join(application.transpose(Range("A2:A" & range("A" & rows.count).end(xlup).row)),"', '") & "'"

我假设您在 A1 中有一个标题,所以从 A2 开始,如果您愿意,可以将其更改为 A1。

我注意到您要求对另一个答案进行解释,所以:

Egan 的代码将遍历 A 列中的每个单元格,并将其添加到当前单元格 B2 中的内容中。因此,它基本上将它在 A 列中所在单元格的值添加到 B2,并在每次循环时添加一个 ', ',直到它用完 A 列中的数据。它还在开始和结束处放置一个 '。

我的代码将获取范围并将其转置为一个数组(数据下降,一个数组横向移动,因此我们转置它),然后它将值数组连接成一个字符串。我们使用JOIN 函数执行此操作,并指定', ' 应该放在数组的每个元素之间(分隔符)。

然后我们只需在开头和结尾添加一个',因为它不会在那里开始,瞧,一串没有循环的连接值。

他们有效地做同样的事情,我的只是一次完成,而不是一次一个单元格。

【讨论】:

  • 您好 Dan,此代码不起作用。我得到的输出为:0110, 0800, CREA, TSMS, 2005 但我需要:'0110', '0800', 'CREA', ' TSMS','2005'
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多