Excel VBA объединяет столбец 1 для диапазона значений в столбце 2 - PullRequest
0 голосов
/ 04 марта 2011

У меня есть набор строк и столбцов, как показано ниже

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

Я попробовал это с помощью формулы и сделал это, но есть ли лучший способ (как в макросе) сделать это?

= ЕСЛИ (В2 = В1, С1 & "" & С2, С2)

и выберите последнюю строку для каждого значения

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Вот меньший вариант

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
0 голосов
/ 10 июля 2018

Я пытаюсь объединить два диапазона. Для каждой ячейки в Range1 объединить все значения в Range2 (разделенные "-"):

Range1 values: 50703, 50702
Range2 values: 52797, 52848
Concatenate: 50703-52797, 50703-52848, 50702-52797, 50702-52848

enter image description here

0 голосов
/ 04 марта 2011

Ну, этот макрос сделает это.Я не обязательно сказал бы, что это было лучше, хотя!

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...