
Я хочу перейти от чего-то вроде первой таблицы ко второй:
...Для использования в сводной таблице. Я хотел бы, чтобы первая таблица была на одном листе, а вторая таблица была на другом листе, обновляя в реальном времени эту "разорванную" вторую таблицу. Я пытаюсь уже некоторое время и не могу заставить это работать. Есть предложения? Форма, которую я использую, выводит этот список значений, разделенных запятыми, в отдельных ячейках, и в этом случае это непрактично делать вручную, так как будут тысячи строк.
решение1
Я изменил сценарий.по ссылке, предоставленной gtwebb. Вот сценарий:
Option Explicit
Sub Main()
Columns("B:B").NumberFormat = "@"
Dim i As Long, c As Long, r As Range, v As Variant
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
v = Split(Range("B" & i), ", ")
c = c + UBound(v) + 1
Next i
For i = 2 To c
Set r = Range("B" & i)
Dim arr As Variant
arr = Split(r, ", ")
Dim j As Long
r = arr(0)
For j = 1 To UBound(arr)
Rows(r.Row + j & ":" & r.Row + j).Insert Shift:=xlDown
r.Offset(j, 0) = arr(j)
r.Offset(j, -1) = r.Offset(0, -1)
r.Offset(j, 1) = r.Offset(0, 1)
Next j
Next i
Columns("C:C").NumberFormat = "@"
Dim k As Long, d As Long, s As Range, w As Variant
For k = 1 To Range("C" & Rows.Count).End(xlUp).Row
w = Split(Range("C" & k), ", ")
d = d + UBound(w) + 1
Next k
For k = 2 To d
Set s = Range("C" & k)
Dim arrb As Variant
arrb = Split(s, ", ")
Dim m As Long
s = arrb(0)
For m = 1 To UBound(arrb)
Rows(s.Row + m & ":" & s.Row + m).Insert Shift:=xlDown
s.Offset(m, 0) = arrb(m)
s.Offset(m, -1) = s.Offset(0, -1)
s.Offset(m, -2) = s.Offset(0, -2)
Next m
Next k
End Sub
Поскольку мне это было нужно только для двух столбцов, я не стал заморачиваться с циклом. Единственное, что было изменено, так это то, что скрипт повторяется второй раз, переменные изменяются, и параметр Offset
изменяется.