Здравствуйте. Можно ли написать макрос для решения данной задачи? Я выделяю диапазон данных и запускаю макрос. Макрос должен сцепить значения (через знак +) третьего и четвертого столбца, при условии, что совпадает первый и второй столбец. Если первый и второй столбец не совпадает, то ничего сцеплять не надо. Также должны удалиться пустые строки со смещением вверх. Прикрепил пример. В листе "Исходный", показано состояние до запуска макроса. В листе "Результат" показан результат после применения макроса. Выделенный диапазон A2-D21 (Лист "Исходный")
Здравствуйте. Можно ли написать макрос для решения данной задачи? Я выделяю диапазон данных и запускаю макрос. Макрос должен сцепить значения (через знак +) третьего и четвертого столбца, при условии, что совпадает первый и второй столбец. Если первый и второй столбец не совпадает, то ничего сцеплять не надо. Также должны удалиться пустые строки со смещением вверх. Прикрепил пример. В листе "Исходный", показано состояние до запуска макроса. В листе "Результат" показан результат после применения макроса. Выделенный диапазон A2-D21 (Лист "Исходный")AlexanderSh88
Здравствуйте. Можно написать макрос, и не особо сложно написать используя scripting.dictionary. Но работать под Маком не будет. Пока не исзвестна система - может не стоит время тратить?
P.S. Хотя написал: [vba]
Код
Option Explicit
Sub tt() Dim a(), i&, t$, d1 As Object, d2 As Object, k a = Selection.Value Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1 Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
For i = 1 To UBound(a) t = Trim(a(i, 1)) & "|" & Trim(a(i, 2)) If Len(t) > 1 Then d1.Item(t) = IIf(Len(Trim(a(i, 3))), d1.Item(t) & "+" & Trim(a(i, 3)), d1.Item(t)) d2.Item(t) = IIf(Len(Trim(a(i, 4))), d2.Item(t) & "+" & Trim(a(i, 4)), d2.Item(t)) End If Next With Sheets("Результат") .UsedRange.Offset(1).Clear i = 1 For Each k In d1.keys i = i + 1 .Cells(i, 1).Resize(, 2) = Split(k, "|") .Cells(i, 3) = Mid(d1.Item(k), 2) .Cells(i, 4) = Mid(d2.Item(k), 2) Next End With
End Sub
[/vba] Выгрузка собранного на лист "Результат", но можно и на исходный выгружать - замените в коде название листа.
Здравствуйте. Можно написать макрос, и не особо сложно написать используя scripting.dictionary. Но работать под Маком не будет. Пока не исзвестна система - может не стоит время тратить?
P.S. Хотя написал: [vba]
Код
Option Explicit
Sub tt() Dim a(), i&, t$, d1 As Object, d2 As Object, k a = Selection.Value Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1 Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
For i = 1 To UBound(a) t = Trim(a(i, 1)) & "|" & Trim(a(i, 2)) If Len(t) > 1 Then d1.Item(t) = IIf(Len(Trim(a(i, 3))), d1.Item(t) & "+" & Trim(a(i, 3)), d1.Item(t)) d2.Item(t) = IIf(Len(Trim(a(i, 4))), d2.Item(t) & "+" & Trim(a(i, 4)), d2.Item(t)) End If Next With Sheets("Результат") .UsedRange.Offset(1).Clear i = 1 For Each k In d1.keys i = i + 1 .Cells(i, 1).Resize(, 2) = Split(k, "|") .Cells(i, 3) = Mid(d1.Item(k), 2) .Cells(i, 4) = Mid(d2.Item(k), 2) Next End With
End Sub
[/vba] Выгрузка собранного на лист "Результат", но можно и на исходный выгружать - замените в коде название листа.Hugo
а как его применять? Я создал макрос, вставил этот код, потом выделяю диапазон А2-D21, применяю макрос, что - то мелькнуло, но ничего не изменилось
а как его применять? Я создал макрос, вставил этот код, потом выделяю диапазон А2-D21, применяю макрос, что - то мелькнуло, но ничего не изменилосьAlexanderSh88
а сейчас понял, спасибо я лист "Результат" создал просто для примера. т.е. на самом деле есть только один лист. В выделенном диапазоне сцепляются третий и четвертый столбцы, если первый и второй одинаковые. Мне сделали вот такой вариант. только здесь таблицы нужно вводить не по вертикали, а по горизонтали Прикрепил.
а сейчас понял, спасибо я лист "Результат" создал просто для примера. т.е. на самом деле есть только один лист. В выделенном диапазоне сцепляются третий и четвертый столбцы, если первый и второй одинаковые. Мне сделали вот такой вариант. только здесь таблицы нужно вводить не по вертикали, а по горизонтали Прикрепил.AlexanderSh88