我有Range(一维),我想通过连接所有值在一个单元格中进行汇总。我以为我可以做到:
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到X,1到1)数组,它有两个维度,而最后一行Join
要求你提供一个维度阵列。
所以我的问题是有没有办法删除“1对1”维度?
如果不是,你将如何在一个单元格中连接一维范围。
示例
A
1
2 2
3 4
4 6
期望的结果
A
1 2, 4, 6
2 2
3 4
4 6
答案 0 :(得分:2)
你太近了!下面的代码假设您将选择空目标单元格下方的单元格。我只是原始代码中的两个调整:
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
答案 1 :(得分:1)
对于您的数据,我不会打扰 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 实际上是一个二维数组。
答案 2 :(得分:1)
以下是一个想法。注意:我不确定代码的OFFSET
部分是否符合您的要求。测试代码,如果有,请告诉我。
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, ", ")
答案 3 :(得分:1)
您可以使用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