Excel VBA连接第1列以获取第2列中的值范围

Excel VBA连接第1列以获取第2列中的值范围,excel,vba,Excel,Vba,我有一组行和列,如下所示 Column1 Column2 123 Value1 456 Value1 789 Value2 101 Value2 234 Value2 567 Value3 890 Value4 I would like to concatenate column1 based on column2 range like: Column3 123 123,456 789 7

我有一组行和列,如下所示

Column1 Column2 123 Value1 456 Value1 789 Value2 101 Value2 234 Value2 567 Value3 890 Value4 I would like to concatenate column1 based on column2 range like: Column3 123 123,456 789 789,101 789,101,234 567 890 第1栏第2栏 123价值1 456价值1 789价值2 101价值2 234价值2 567价值3 890值4 我希望根据column2范围连接column1,如下所示: 第3栏 123 123,456 789 789,101 789,101,234 567 890 我用公式试过了,但有没有更好的方法(比如在宏中)呢

=如果(B2=B1,C1&“,”&C2,C2)


然后为每个值选择最后一行。好的,这个宏可以做到这一点。不过,我不一定会说它更好

Sub Macro1()
    Dim Source As Range
    Dim Control As Range
    Dim Output As Range
    Set Source = Range("A1")
    Set Control = Range("B1")
    Set Output = Range("C1")
    Dim StoreHere As String
    Dim Row As Integer
    Dim AddItOn As Boolean

    Row = 1
    StoreHere = ""

    While (Not (IsEmpty(Source.Cells(Row, 1))))
        If (Row > 1) Then
            If (Control.Cells(Row, 1) = Control.Cells(Row - 1, 1)) Then
                AddItOn = True
            Else
                AddItOn = False
            End If
        Else
            AddItOn = False
        End If

        If (AddItOn = True) Then
            StoreHere = StoreHere & "," & Source.Cells(Row, 1)
        Else
            StoreHere = Source.Cells(Row, 1)
        End If

        Output.Cells(Row, 1).NumberFormat = "@"
        Output.Cells(Row, 1) = StoreHere
        Row = Row + 1
    Wend
End Sub

这里有一个较小的选项

Sub Macro1()
    Dim cl As Range

    Set cl = [A1]  ' set to where your data starts 
    Do While cl <> ""
        If cl.Cells(1, 2) = cl.Cells(0, 2) Then
            cl.Cells(1, 3) = cl.Cells(0, 3) & "," & cl
        Else
            cl.Cells(1, 3) = CStr(cl)
        End If
        Set cl = cl.Cells(2, 1)
    Loop
End Sub
Sub宏1()
Dim cl As范围
将cl=[A1]”设置为数据起始位置
当cl“”时执行
如果cl.Cells(1,2)=cl.Cells(0,2),则
cl.Cells(1,3)=cl.Cells(0,3)和“,”和cl
其他的
cl.单元(1,3)=CStr(cl)
如果结束
设置cl=cl.单元格(2,1)
环
端接头

我正在尝试连接两个范围。对于Range1中的每个单元格,连接Range2中的所有值(以“-”分隔):


您认为vba解决方案“更好”的原因是什么?这个公式似乎很简单、简单、紧凑……(这篇文章似乎没有提供问题的答案。请编辑你的答案,或者只是将其作为问题的评论发布)。
Range1 values: 50703, 50702
Range2 values: 52797, 52848
Concatenate: 50703-52797, 50703-52848, 50702-52797, 50702-52848