Здравствуйте. Для упрощения работы нужна помощь. Сделал документ excel в которой генерируются наименования товара и присваиваемые ему номера кодов в зависимости от вводных данных. На первом листе "Вводные для печати" формируется таблица данных, на втором листе "На печать" итоговая таблица. В зависимости от данных количество строк может быть разным, когда 5, когда 1005 единиц товара. Вот эту таблицу каждый раз вручную приходится копировать и экспортировать в новый фаил excel (софт принтера может использовать эти таблицы, но не различает данные и пустые ячейки в которых прописана только формула). Каталог и имя экспортируемого фаила должны быть такими C:\Печать этикеток\Этикетки на печать.xlsx) В вложении максимально упрощеная заготовка с описанием.
Здравствуйте. Для упрощения работы нужна помощь. Сделал документ excel в которой генерируются наименования товара и присваиваемые ему номера кодов в зависимости от вводных данных. На первом листе "Вводные для печати" формируется таблица данных, на втором листе "На печать" итоговая таблица. В зависимости от данных количество строк может быть разным, когда 5, когда 1005 единиц товара. Вот эту таблицу каждый раз вручную приходится копировать и экспортировать в новый фаил excel (софт принтера может использовать эти таблицы, но не различает данные и пустые ячейки в которых прописана только формула). Каталог и имя экспортируемого фаила должны быть такими C:\Печать этикеток\Этикетки на печать.xlsx) В вложении максимально упрощеная заготовка с описанием.Александр7034
Доброго времени суток, форумчане. Прошу помощи, поскольку только начал разбираться с VBA, а сделать надо срочно....Имеется таблица. Во втором столбце встречаются одинаковые фамилии. Нужно создать новую таблицу, которая при вызове макросы создает таблицу, в которой находятся одинаковые значения из столбца 2, а в остальных столбцах новой таблицы остальные значения из первой таблицы. (если это возможно, то только те значения, которые соответствуют, где одно из значений в столбце "а" соответствует необходимому значению месяца. Для наглядности приложил файл. Буду очень благодарен за любую помощь!!!
Доброго времени суток, форумчане. Прошу помощи, поскольку только начал разбираться с VBA, а сделать надо срочно....Имеется таблица. Во втором столбце встречаются одинаковые фамилии. Нужно создать новую таблицу, которая при вызове макросы создает таблицу, в которой находятся одинаковые значения из столбца 2, а в остальных столбцах новой таблицы остальные значения из первой таблицы. (если это возможно, то только те значения, которые соответствуют, где одно из значений в столбце "а" соответствует необходимому значению месяца. Для наглядности приложил файл. Буду очень благодарен за любую помощь!!!Al1978
Sub macro_1() Dim Dict AsObject, item, j, h, a Dim arr, lstRow AsLong Set Dict = CreateObject("Scripting.Dictionary") With Dict
.CompareMode = vbTextCompare EndWith
arr = Application.Transpose(Application.InputBox("Выберите диапазон для преобразования", Type:=8))
For j = LBound(arr, 2) ToUBound(arr, 2) IfNot Dict.exists(arr(2, j)) Then
Dict.Add arr(2, j), arr(3, j) & ";" & arr(1, j) & ";" & arr(4, j) Else
Dict.item(arr(2, j)) = _
Dict.item(arr(2, j)) & "|" & arr(3, j) & ";" & arr(1, j) & ";" & arr(4, j) EndIf Next j With Sheets("Лист2") ' Лист2 поменять на нужное имя листа
lstRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each h In Dict.keys
item = Split(Dict.item(h), "|")
.Cells(lstRow, 1).Resize(UBound(item) + 1, 1) = h For Each a In item
a = Split(a, ";")
.Cells(lstRow, 2).Resize(1, UBound(a) + 1) = a
lstRow = lstRow + 1 Next a Next h EndWith EndSub
Потом объединить ячейки по Фамилии.
Al1978, приветствую! Можно так:
Sub macro_1() Dim Dict AsObject, item, j, h, a Dim arr, lstRow AsLong Set Dict = CreateObject("Scripting.Dictionary") With Dict
.CompareMode = vbTextCompare EndWith
arr = Application.Transpose(Application.InputBox("Выберите диапазон для преобразования", Type:=8))
For j = LBound(arr, 2) ToUBound(arr, 2) IfNot Dict.exists(arr(2, j)) Then
Dict.Add arr(2, j), arr(3, j) & ";" & arr(1, j) & ";" & arr(4, j) Else
Dict.item(arr(2, j)) = _
Dict.item(arr(2, j)) & "|" & arr(3, j) & ";" & arr(1, j) & ";" & arr(4, j) EndIf Next j With Sheets("Лист2") ' Лист2 поменять на нужное имя листа
lstRow = .Cells(.Rows.Count, 1).End(xlUp).Row For Each h In Dict.keys
item = Split(Dict.item(h), "|")
.Cells(lstRow, 1).Resize(UBound(item) + 1, 1) = h For Each a In item
a = Split(a, ";")
.Cells(lstRow, 2).Resize(1, UBound(a) + 1) = a
lstRow = lstRow + 1 Next a Next h EndWith EndSub
Спасибо то что нужно. А что нужно прописать в короткий код что бы ширина таблиц была заданной? А то после экспорта столбцы стандартные, соответствено текст в ячейках не помещается.
Спасибо то что нужно. А что нужно прописать в короткий код что бы ширина таблиц была заданной? А то после экспорта столбцы стандартные, соответствено текст в ячейках не помещается.Александр7034
Сообщение отредактировал Serge_007 - Четверг, 05.05.2022, 09:51
Подозреваю дело в том что в отличии от примера состоящего из двух листов (Вводные для печати и на печать) в проекте у меня 4 листа. Хотя и сделал листы с точно такими же именами, видимо другое количество листов ведет к ошибке.
jun, а не подскажите, при копировании кода уже в мой проект, выходит сообщение об ошибке при выполнении и выделена следующая строка в debug
Подозреваю дело в том что в отличии от примера состоящего из двух листов (Вводные для печати и на печать) в проекте у меня 4 листа. Хотя и сделал листы с точно такими же именами, видимо другое количество листов ведет к ошибке.Александр7034
Сообщение отредактировал Александр7034 - Пятница, 13.05.2022, 14:02
Александр7034, можете подсказать, какая ошибка? Что пишет? Может быть item не определилась из-за того что отсутствуют нули во втором столбце после значений? Можно посмотреть в Locals Window (Alt + F11 -> View -> Locals Window)
Александр7034, можете подсказать, какая ошибка? Что пишет? Может быть item не определилась из-за того что отсутствуют нули во втором столбце после значений? Можно посмотреть в Locals Window (Alt + F11 -> View -> Locals Window)jun
Так и оказалось, опытным путем выяснил что нули являются завершающий строкой. А не подскажите какую строку в вашем коде выше нужно прописать, что бы появлялась надпись "выполнено", а то по началу так хорошо импортировалось без всяких надписей, что подумал код не работает, так как визуально ни чего не произошло.
Так и оказалось, опытным путем выяснил что нули являются завершающий строкой. А не подскажите какую строку в вашем коде выше нужно прописать, что бы появлялась надпись "выполнено", а то по началу так хорошо импортировалось без всяких надписей, что подумал код не работает, так как визуально ни чего не произошло.Александр7034
Сообщение отредактировал Serge_007 - Вторник, 17.05.2022, 09:03