Как преобразовать список в таблицу (с плавающим количеством строк)? - VBA
Формулировка задачи:
Приветсвтую, Есть список страниц сайта с результатом проверки на уникальность.
Хотелось бы получить горизонтальную таблицу типа:
Основная трудность в том, что в списке
плавающее количество строк
Примечания: 1. в качестве разделителя используются символы ",,," (автозаменой можно заменить на любой - не приципиально) 2. Хотя значения плавающее, но они идут строгов диапазоне от 0-3
0 - (когда просто нет ячеек) от 1(ячейка b7 в примере) до 3 (диапазон b12:b14 в примере) P.S. Создавал тему с схожей задачей, и там получил ответ через =ИНДЕКС, но там было фиксированное число строк в списке. Но тут впервые столкнулся с плавающим числом строк. Пример самого файлаУникальность страниц.xlsxРешение задачи: «Как преобразовать список в таблицу (с плавающим количеством строк)?»
textual
Листинг программы
Sub ПРЕОБРАЗОВАТЬ()
Dim m(), lr, r, c, rz, k, j
m = Лист1.Range("A1").Resize(Лист1.Cells(Лист1.Rows.Count, 1).End(xlUp).Row, 2).Value
k = WorksheetFunction.CountIf(Лист1.Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row), Лист1.Range("A1"))
ReDim rz(1 To k, 1 To 8)
For r = 1 To UBound(m)
If InStr(1, m(r, 1), "Адрес") > 0 Then
j = j + 1
rz(j, 1) = m(r, 2)
rz(j, 2) = m(r + 1, 2)
If m(r + 2, 1) = "Найденные совпадения:" Then
r = r + 2:
c = 3
Do
r = r + 1
rz(j, c) = m(r, 1)
rz(j, c + 1) = m(r, 2)
c = c + 2
If r + 1 > UBound(m) Then Exit Do
Loop While m(r + 1, 1) <> ",,,"
End If
End If
Next r
Лист2.Range("A2").Resize(Лист1.Cells(Лист1.Rows.Count, 1).End(xlUp).Row, 8).ClearContents
Лист2.Range("A2").Resize(UBound(rz), 8) = rz
End Sub