Объединение данных в большую сторону на основе значения в другом столбце

#excel #vba

#excel #vba

Вопрос:

У меня есть данные, как в столбце A, так и в столбце B. Я хотел бы получить данные, указанные в столбце C.

можно ли получить то же самое с помощью VBA? Я не могу выполнить цикл вверх.

Заранее благодарю вас.

  ---------- ---------- ---------- 
| Column A | Column B | Column C |
 ---------- ---------- ---------- 
| a        |          |          |
| b        |          |          |
| c        |          |          |
| d        |        1 | a,b,c,d  |
| x        |          |          |
| y        |          |          |
| z        |        2 | y,z      |
| s        |          |          |
| d        |          |          |
| e        |        3 | s,d,e    |
 ---------- ---------- ---------- 
  

Комментарии:

1. Что происходит с x в 2?

2. Посмотрите, xldown чтобы найти соответствующую строку в столбце B, затем используйте xlup из этой строки, чтобы найти последнее место. Затем объединить (диапазон (начало: конец),»,»)

Ответ №1:

Вы могли бы попробовать:

 Option Explicit

Sub trst()

    Dim LastRow As Long, i As Long
    Dim str As String

    With ThisWorkbook.Worksheets("Sheet1")

         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

         For i = 2 To LastRow

            If .Range("B" amp; i).Value = "" Then

                If str = "" Then
                    str = .Range("A" amp; i).Value
                Else
                    str = str amp; ", " amp; .Range("A" amp; i).Value
                End If

            Else

                .Range("C" amp; i).Value = str amp; ", " amp; .Range("A" amp; i).Value
                str = ""

            End If

         Next i

    End With

End Sub
  

Ответ №2:

Что-то вроде этого

 Sub v()

Dim r As Excel.Range
Dim l As Long
Dim lRows As Long
Dim lNum As Long

Set r = Range("a1:b10")

l = 1

Do Until l > r.Rows.Count

    lNum = r.Cells(l, 2).End(xlDown).Row
    lRows = (lNum - l)   1
    r.Cells(lNum, 3).Value = _
        Join(Application.Transpose(r.Cells(l, 1).Resize(lRows, 1)), ",")
    l = lNum   1

Loop

End Sub