减less数组中的维数

我有范围(一维),我想通过连接所有的值在一个单元格中总结。 我以为我可以做的只是:

Dim Data_array() Dim Source_Range as Range Set Source_Range = Selection Data_array() = Source_Range.Value2 Source_range.Offset( -1 ,0).Value = Join(Data_array, ", ") 

然而这返回error 5因为Data_array是一个(1 To X,1 To 1)数组,它有两个维度,最后一行的Join需要你提供一个维数组。

所以我的问题是有没有办法消除“1对1”的维度?
如果不是,你将如何连接一个单元格中的一维范围。

  A 1 2 2 3 4 4 6 

期望的结果

  A 1 2, 4, 6 2 2 3 4 4 6 

你太亲近了! 下面的代码假定您将select空目标单元格下面的单元格。 我只是从你的原始代码两个调整:

 Sub testing() Dim Data_array() Dim Source_Range As Range Set Source_Range = Selection Data_array() = WorksheetFunction.Transpose(Source_Range.Value2) Source_Range.Offset(-1, 0).Resize(1, 1).Value = Join(Data_array, ", ") End Sub 

下面是一个想法。 注意:我不确定你的代码的OFFSET部分是否做你想做的事情。 testing代码,如果是的话,让我知道。

 Dim Data_array() Dim Source_Range As Range Dim nIncrement As Integer Set Source_Range = Selection nIncrement = 1 ReDim Data_array(1 To Source_Range.Rows.Count) For Each cel In Source_Range Data_array(nIncrement) = cel.Value nIncrement = nIncrement + 1 Next cel Source_Range.Offset(-1, 0).Value = Join(Data_array, ", ") 

对于你的数据,我不会打扰一个VBA数组。 考虑:

 Public Function Konkat(rin As Range) As String For Each r In rin v = r.Value If v <> "" Then Konkat = Konkat & "," & v End If Next r Konkat = Right(Konkat, Len(Konkat) - 1) End Function 

在这里输入图像说明

这是因为在你的代码中, data_Array实际上是一个二维数组。

您可以使用INDEX工作表函数来切出一列或一行。

 Sub JoinRangeComma() Dim vaData As Variant Dim rSource As Range Dim wf As WorksheetFunction Set wf = Application.WorksheetFunction Set rSource = Selection vaData = rSource.Value2 rSource.Cells(1).Offset(-1, 0).Value = Join(wf.Index(wf.Transpose(vaData), 1, 0), ", ") End Sub