减少数组中的维数

时间:2015-03-02 16:13:53

标签: arrays excel vba excel-vba

我有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

4 个答案:

答案 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

enter image description here

这是因为在您的代码中, 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