VBA代码在多个单元格中

我对使用VBA相对来说比较新。 我有这个代码读取一个范围内的一组数据,并将数据连接成一次单元格。 我有大量的这个代码需要运行的单元格。 有人可以帮我循环它,所以当代码完成一个范围,它下移下一个单元格,并开始在下一个范围?

Sub ConcatenateAll() Dim x As String, y As String, rng As Range, cell As Range With ActiveSheet Set rng = .Range("AT1:CB20") For Each cell In rng If cell.Value <> "" Then x = x & cell.Value & "; " End If Next .Range("AK1").Value = Left(x, Len(x) - 2) End With End Sub 

我能想到的最好的方法是将parameter passing给ConcatenateAll过程,然后提到你想要连接的所有范围。 例如,我从Sample()调用两次ConcatenateAll() Sample()

我也冒昧地稍微修改你的代码。

 Sub Sample() With ActiveSheet ConcatenateAll .Range("AT1:CB20"), .Range("AK1") ConcatenateAll .Range("AT31:CB50"), .Range("AK2") End With End Sub Sub ConcatenateAll(rngInput As Range, rngOutput As Range) Dim x As String, cell As Range For Each cell In rngInput If Len(Trim(cell.Value)) <> 0 Then If x = "" Then x = cell.Value Else x = x & "; " & cell.Value End If End If Next rngOutput.Value = x End Sub 

跟进

AT1:CB20,AT21:CB40,AT41:CB60,AT61:CB80我想在AK1,AK2,AK3,AK4等显示的结果,直到范围的结尾 – user2668126 4分钟前

试试这个代码。 由于有一个趋势,在范围内循环变得更容易。

 Option Explicit Sub Sample() Dim r1 As Long, r2 As Long, i As Long r2 = 20: i = 1 With ActiveSheet For r1 = 1 To 2001 Step 20 ConcatenateAll .Range("AT" & r1 & ":CB" & r2), .Range("AK" & i) r2 = r2 + 20: i = i + 1 Next End With End Sub Sub ConcatenateAll(rngInput As Range, rngOutput As Range) Dim x As String, cell As Range For Each cell In rngInput If Len(Trim(cell.Value)) <> 0 Then If x = "" Then x = cell.Value Else x = x & "; " & cell.Value End If End If Next rngOutput.Value = x End Sub 

由于您试图在单元格中显示输出,我认为最好的行动方式是编写自定义的VBA函数,然后将其用作Excel工作表函数为此,首先需要定义一个公共函数VBA模块:

 Public Function concat(values As Variant) Dim val As Variant, aux As String For Each val In values If val <> "" Then aux = aux & val & "; " Next val If Len(aux) > 2 Then aux = Left(aux, Len(aux) - 2) concat = aux End Function 

然后你可以使用这个函数作为工作表函数,例如你可以在单元格AK1 =concat(AT1:CB20)写入,你将得到和你的代码相同的结果