Приветствую всех! Очень прошу помощи, то ли я запрос правильно сформулировать не могу, то ли это что-то сложное, но нигде не могу найти решение моей задачи. Подгрузила, как пример вымышленную таблицу, в моём случае значений далеко за тысячу, больше столбцов и вручную делать перетасовку данных реально, но довольно долго.
Суть - есть данные - год, месяц (рождения) и перечисление имён через запятую (три столбца - Год/Месяц/Имя). Мне же необходимо, раскидать значения имён в столбец по строкам, и значения, которые им ранее соответствовали скопировать также построчно, при этом те данные где ничего раскидывать не нужно, остаются в том же виде. Чтобы было понятнее прикрепила табличку - первый лист то, что у меня есть изначально, второй - "итог", то что должно получиться. Подозреваю, что без макроса тут не обойтись... Ещё раз обращаю внимание, что у меня данных намного больше, и значений в некоторых ячейках через запятую, достигает 100 и более, их надо превратить в столбец.
Есть ли какие-то варианты решения, не тратя на это много времени? Заранее спасибо.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Комплексные задачи - это в раздел Работа (там платно) Здесьправило "один вопрос - одна тема". предложите название темы, отражающее вопрос. Заменят модераторы
Разделить ячейки по разделителю ВНИЗ (по строкам), вставляя новые строки По сути, это моя старая тема. Про "заполнить сверху" можно не писать - и так посмотрит
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub ТекстоПоСтрокам()
Dim arr As Variant
arr = GetArr()
If Not IsArray(arr) Then
MsgBox "Выделите диапазон.", vbInformation
Exit Sub
End If
Dim y As Long
Dim x As Long
Dim h As Long
Dim n As Long
x = UBound(arr, 2)
For y = 1 To UBound(arr, 1)
n = n + 1 + Len(arr(y, x)) - Len(Replace(arr(y, x), ",", ""))
Next
Dim orr As Variant
ReDim orr(1 To n, 1 To x)
' For h = 1 To x
' orr(1, h) = arr(1, h)
' Next
Dim brr As Variant
Dim v As Variant
n = 0
For y = 1 To UBound(arr, 1)
brr = Split(arr(y, x), ",")
For Each v In brr
n = n + 1
For h = 1 To x - 1
orr(n, h) = arr(y, h)
Next
orr(n, x) = Trim(v)
Next
Next
OutArr orr
End Sub
Sub OutArr(arr As Variant)
With Workbooks.Add(1)
.Sheets(1).Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
.Saved = True
End With
End Sub
Function GetArr() As Variant
Dim arr As Variant
arr = Intersect(Selection, ActiveSheet.UsedRange)
GetArr = arr
End Function
Sub mrshkei()
Dim arr, arr2, arr3, i As Long, n As Long, lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
arr = Range("A2:C" & lr)
For i = LBound(arr) To UBound(arr)
arr2 = Split(arr(i, 3), ", ")
For n = LBound(arr2) To UBound(arr2)
k = k + 1
Next n
Next i
ReDim arr3(1 To k, 1 To 3)
k = 1
For i = LBound(arr) To UBound(arr)
arr2 = Split(arr(i, 3), ", ")
For n = LBound(arr2) To UBound(arr2)
arr3(k, 1) = arr(i, 1)
arr3(k, 2) = arr(i, 2)
arr3(k, 3) = arr2(n)
k = k + 1
Next n
Next i
Range("D2").Resize(UBound(arr3), 3) = arr3
End Sub
Sub SplitNames()
m1 = Sheets("Начальные данные").Range("A2:C10").Value
n = 1
For i = LBound(m1) + 1 To UBound(m1)
A = Split(m1(i, 3), ", ")
n = n + UBound(A) + 1
Next i
ReDim m2(1 To n + 1, 1 To 3)
n = 1
For i = LBound(m1) To UBound(m1)
A = Split(m1(i, 3), ", ")
For j = LBound(A) To UBound(A)
If A(j) <> "" Then
For k = 1 To UBound(m1, 2)
m2(n, k) = m1(i, k)
Next k
m2(n, UBound(m1, 2)) = A(j)
n = n + 1
End If
Next j
Next
Sheets("Итог").Range("A2:C" & UBound(m2)).Value = m2
End Sub
Jack Famous написал: Разделить ячейки по разделителю ВНИЗ (по строкам), вставляя новые строки
Спасибо, я уже неделю запрос верно сформулировать-то пытаюсь)))
МатросНаЗебре, спасибо, работает)))) No Name, тоже работает, только ячейки ("A2:C10") немного поменяла. Спасибо! Огромное всем спасибо, буду теперь пытаться понять, как вы эту магию сотворили))) Чудеса просто
Для коллекции: насколько я понимаю, обратная задача может быть решена несколькими способами: Распределяем список по наборам Возможно идеи из этой статьи пригодятся при формулировании новых вопросов...
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
оффтопик: Первое сообщение было отправлено от имени Екатерины Хлопковой, а восьмое - уже от Екатерины Глазуновой... Екатерина, Вас можно поздравить с замужеством?
Может файл с датами и именами как-то связан с этим праздничным событием? А уж, что значит несколько имён, записанных через запятую в одну дату, остаётся только гадать. )