#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