连接数据列

*编辑添加:我收到当前错误。 看到这篇文章的底部截图。

我在列D中有文本。macros应该find空白单元格,然后连接下面的所有单元格的文本。

以D2开始的文字,像这样显示…

Blank Cell SampleText1 SampleText2 SampleText3 Blank Cell SampleText4 SampleText5 SampleText6 

macros应该显示D2中的文本…

 SampleText1, SampleText2, SampleText3 

然后在D6,像这样…

 SampleText4, SampleText5, SampleText6 

..等等。

这只需要在列D中工作,所以我猜我可以写入该范围。

我遇到的最接近的答案是在这里: Excelmacros来连接

这是我目前正在使用的代码…

 Sub ConcatColumns() Do While ActiveCell <> "" 'Loops until the active cell is blank. 'The "&" must have a space on both sides or it will be 'treated as a variable type of long integer. ActiveCell.Offset(0, 1).FormulaR1C1 = _ ActiveCell.Offset(0, -1) & " " & ActiveCell.Offset(0, 0) ActiveCell.Offset(1, 0).Select Loop End Sub 

编辑:现在使用来自@jeeped的伟大的代码,但接收到一个错误,在下面的截图中看到

在这里输入图像说明

从底部开始工作,build立一个string数组。 到达空白单元格时,使用首选的分隔符连接string。

 Sub build_StringLists() Dim rw As Long, v As Long, vTMP As Variant, vSTRs() As Variant Dim bReversedOrder As Boolean, dDeleteSourceRows As Boolean ReDim vSTRs(0) bReversedOrder = False dDeleteSourceRows = True With Worksheets("Sheet4") For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If IsEmpty(.Cells(rw, 1)) Then ReDim Preserve vSTRs(0 To UBound(vSTRs) - 1) If Not bReversedOrder Then For v = LBound(vSTRs) To UBound(vSTRs) / 2 vTMP = vSTRs(UBound(vSTRs) - v) vSTRs(UBound(vSTRs) - v) = vSTRs(v) vSTRs(v) = vTMP Next v End If .Cells(rw, 1) = Join(vSTRs, ", ") .Cells(rw, 1).Font.Color = vbBlue If dDeleteSourceRows Then _ .Cells(rw, 1).Offset(1, 0).Resize(UBound(vSTRs) + 1, 1).EntireRow.Delete ReDim vSTRs(0) Else vSTRs(UBound(vSTRs)) = .Cells(rw, 1).Value2 ReDim Preserve vSTRs(0 To UBound(vSTRs) + 1) End If Next rw End With End Sub 

我留下了反转string列表的选项以及删除原来的string行。

build_String_Lists_before
之前build_StringLists过程

build_String_Lists_After
build_StringLists过程之后