Помогите пожалуйста с макросом! Имеется исходная таблица, необходимо получить новую таблицу (на новом листе, или новой книге), если в исходной таблице значения столбцов 2,4,5 (все три значения) для значений в столбце 6 совпадают, то в новой таблице собрать значения со столбца 6 в одну ячейку через запятую, а в графе 7 суммировать значения по графе 7 у собранных в графе 6 (в одну ячейку) значений. Ну а графы 2,4,5 (у новой таблицы) должны быть заполнены соответствующими значениями по совпадению которых собирались, суммировались значения в столбцах 6 и 7 по строкам.
Прикладываю пример. На листе ИСХОДНЫЙ часть исходной таблицы, на листе РЕЗУЛЬТАТ пример того что должно получится.
Заранее благодарю!
Добрый день!
Помогите пожалуйста с макросом! Имеется исходная таблица, необходимо получить новую таблицу (на новом листе, или новой книге), если в исходной таблице значения столбцов 2,4,5 (все три значения) для значений в столбце 6 совпадают, то в новой таблице собрать значения со столбца 6 в одну ячейку через запятую, а в графе 7 суммировать значения по графе 7 у собранных в графе 6 (в одну ячейку) значений. Ну а графы 2,4,5 (у новой таблицы) должны быть заполнены соответствующими значениями по совпадению которых собирались, суммировались значения в столбцах 6 и 7 по строкам.
Прикладываю пример. На листе ИСХОДНЫЙ часть исходной таблицы, на листе РЕЗУЛЬТАТ пример того что должно получится.
misharin, ну Вы и загнули. Задача поставлена запутано и никто не хочет разбираться. Проще объясните. Я так понял что нужно свернуть таблицу, при условии совпадения по столбцам 2,4 и 5. В 6 столбец собрать значения через запятую. В 7ую - суммировать
misharin, ну Вы и загнули. Задача поставлена запутано и никто не хочет разбираться. Проще объясните. Я так понял что нужно свернуть таблицу, при условии совпадения по столбцам 2,4 и 5. В 6 столбец собрать значения через запятую. В 7ую - суммироватьdevilkurs
devilkurs, в принципе да, если проще. В общем в столбце 6 нужно найти значения у которых в столбцах 2,4,5 значения совпадают. В графу 6 собрать значения (перечислением, через запятую), а в графе 7 сумму значений с графы 7.
devilkurs, в принципе да, если проще. В общем в столбце 6 нужно найти значения у которых в столбцах 2,4,5 значения совпадают. В графу 6 собрать значения (перечислением, через запятую), а в графе 7 сумму значений с графы 7.misharin
Не подскажешь, что нужно будет подправить если потребуется к условиям (столбцы 2,4,5) еще добавить столбец 3? . Ну и если не трудно можно названия понятной литературы по макросам. чтобы что и зачем.
Karataev, Все супер Работает. Благодарю!
Не подскажешь, что нужно будет подправить если потребуется к условиям (столбцы 2,4,5) еще добавить столбец 3? . Ну и если не трудно можно названия понятной литературы по макросам. чтобы что и зачем.misharin
В макросе я сделал комментарии над строками, в которые надо вносить изменения при добавлении/удалении условий. Литературу не могу посоветовать (не знаю, какая хорошая).
ActiveSheet.Sort.SortFields.Clear 'здесь надо указать столбец, по которому проводить сортировку 'столбцы можно менять местами, выбирая в какой последовательности нужно сортировать столбцы ActiveSheet.Sort.SortFields.Add Key:=Columns("B"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("C"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("D"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("E"), SortOn:=xlSortOnValues, Order:=xlAscending With ActiveSheet.Sort .SetRange Columns("A:H").Rows("3:" & Rows.Count) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .Apply End With
lr = Cells(Rows.Count, "B").End(xlUp).Row arr() = Range("A1:H" & lr).Value For i = UBound(arr) To 4 Step -1 'здесь надо добавить сравнение для соседних строк столбца If arr(i, 2) = arr(i - 1, 2) And arr(i, 3) = arr(i - 1, 3) And arr(i, 4) = arr(i - 1, 4) And _ arr(i, 5) = arr(i - 1, 5) Then arr(i - 1, 6) = arr(i - 1, 6) & "," & arr(i, 6) arr(i - 1, 7) = arr(i - 1, 7) + arr(i, 7) arr(i, 2) = Empty End If Next i Range("A1:H" & lr).Value = arr()
On Error Resume Next Columns("B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0
Application.ScreenUpdating = True
End Sub
[/vba]
В макросе я сделал комментарии над строками, в которые надо вносить изменения при добавлении/удалении условий. Литературу не могу посоветовать (не знаю, какая хорошая).
ActiveSheet.Sort.SortFields.Clear 'здесь надо указать столбец, по которому проводить сортировку 'столбцы можно менять местами, выбирая в какой последовательности нужно сортировать столбцы ActiveSheet.Sort.SortFields.Add Key:=Columns("B"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("C"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("D"), SortOn:=xlSortOnValues, Order:=xlAscending ActiveSheet.Sort.SortFields.Add Key:=Columns("E"), SortOn:=xlSortOnValues, Order:=xlAscending With ActiveSheet.Sort .SetRange Columns("A:H").Rows("3:" & Rows.Count) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .Apply End With
lr = Cells(Rows.Count, "B").End(xlUp).Row arr() = Range("A1:H" & lr).Value For i = UBound(arr) To 4 Step -1 'здесь надо добавить сравнение для соседних строк столбца If arr(i, 2) = arr(i - 1, 2) And arr(i, 3) = arr(i - 1, 3) And arr(i, 4) = arr(i - 1, 4) And _ arr(i, 5) = arr(i - 1, 5) Then arr(i - 1, 6) = arr(i - 1, 6) & "," & arr(i, 6) arr(i - 1, 7) = arr(i - 1, 7) + arr(i, 7) arr(i, 2) = Empty End If Next i Range("A1:H" & lr).Value = arr()
On Error Resume Next Columns("B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0
Появилась необходимость доработать макрос. Просьба помочь! Согласно примеру нужно было в графу 6 собрать значения (перечислением, через запятую). Есть необходимость в данное перечисление делать там где по порядку идут через дефис, а там где не по порядку через запятую. Например: было 1,2,3,4,5,6,7,10,11,15,16,17 теперь надо 1-7,10,11,15-17
Добрый день!
Появилась необходимость доработать макрос. Просьба помочь! Согласно примеру нужно было в графу 6 собрать значения (перечислением, через запятую). Есть необходимость в данное перечисление делать там где по порядку идут через дефис, а там где не по порядку через запятую. Например: было 1,2,3,4,5,6,7,10,11,15,16,17 теперь надо 1-7,10,11,15-17misharin
было 1,2,3,4,5,6,7,10,11,15,16,17 теперь надо 1-7,10,11,15-17
[vba]
Код
Option Explicit
Dim arr
Sub continuous_sequence() Dim rng As Range Dim sNew As String, Symb As String Dim i As Long, j As Long
'On Error Resume Next
With ActiveSheet For i = 3 To .UsedRange.Rows.Count Set rng = .Cells(i, 6) arr = Split(rng, ",") For j = LBound(arr) + 1 To UBound(arr) If CLng(arr(j - 1)) = CLng(arr(j) - 1) Then Symb = "," Else Symb = "-" End If sNew = func_sNew(sNew, Symb, j) Next 'rng.Value = sNew 'для записи = раскомментировать Debug.Print sNew sNew = "" Next End With End Sub
Function func_sNew(ByRef sNew As String, _ ByVal Symb As String, _ j As Long) 'поставить символ sNew = sNew & arr(j - 1) & Symb & arr(j) ' отрезать слева по символу If j < UBound(arr) Then _ sNew = Left(sNew, InStrRev(sNew, Symb))
было 1,2,3,4,5,6,7,10,11,15,16,17 теперь надо 1-7,10,11,15-17
[vba]
Код
Option Explicit
Dim arr
Sub continuous_sequence() Dim rng As Range Dim sNew As String, Symb As String Dim i As Long, j As Long
'On Error Resume Next
With ActiveSheet For i = 3 To .UsedRange.Rows.Count Set rng = .Cells(i, 6) arr = Split(rng, ",") For j = LBound(arr) + 1 To UBound(arr) If CLng(arr(j - 1)) = CLng(arr(j) - 1) Then Symb = "," Else Symb = "-" End If sNew = func_sNew(sNew, Symb, j) Next 'rng.Value = sNew 'для записи = раскомментировать Debug.Print sNew sNew = "" Next End With End Sub
Function func_sNew(ByRef sNew As String, _ ByVal Symb As String, _ j As Long) 'поставить символ sNew = sNew & arr(j - 1) & Symb & arr(j) ' отрезать слева по символу If j < UBound(arr) Then _ sNew = Left(sNew, InStrRev(sNew, Symb))
InExSu, Что то не срабатывает. Вообще никак не реагирует. Почему нет Sub и End Sub. Вернее End Sub есть но он почему то по середине. Не разобрался
InExSu, Что то не срабатывает. Вообще никак не реагирует. Почему нет Sub и End Sub. Вернее End Sub есть но он почему то по середине. Не разобралсяmisharin
InExSu, Нужно чтобы сбор информации осуществился с результатом, где если цифры идут по порядку будет стоять дефис. А не на готовом файле применять еще макрос. И этот макро все равно не работает. Забил цифры 1,2,3,4,5,7,8,9,11 применил макрос, результат: 1,2,3,4,5-7,8,9-11. Вообще не то
InExSu, Нужно чтобы сбор информации осуществился с результатом, где если цифры идут по порядку будет стоять дефис. А не на готовом файле применять еще макрос. И этот макро все равно не работает. Забил цифры 1,2,3,4,5,7,8,9,11 применил макрос, результат: 1,2,3,4,5-7,8,9-11. Вообще не тоmisharin
Помогите пожалуйста с макросом! Свое время с помощью знатоков форума был составлен макрос для обобщения данных по условиям. есть какая то ошибка видимо и макрос не все данные обобщает. Прикладываю пример. Там на листе "Результат" выделены цветами данные которые по идее должны были объединится
Добрый день!
Помогите пожалуйста с макросом! Свое время с помощью знатоков форума был составлен макрос для обобщения данных по условиям. есть какая то ошибка видимо и макрос не все данные обобщает. Прикладываю пример. Там на листе "Результат" выделены цветами данные которые по идее должны были объединитсяmisharin