Выпускалась продукция 1 декабря с разными Артикулами в течение смены и они заносились во вкладку '01' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.
Выпускалась продукция 7 декабря с разными Артикулами в течение смены и они заносились во вкладку '07' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.
Во вкладке 'Средняя масса' необходимо, чтобы в столбце А формировался список артикулов за декабрь месяц, а в столбце Е считалась средняя масса по продукции за декабрь.
Проще говоря должно получиться так, как представлено на вкладке 'Средняя масса (2)'
Выпускалась продукция 1 декабря с разными Артикулами в течение смены и они заносились во вкладку '01' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.
Выпускалась продукция 7 декабря с разными Артикулами в течение смены и они заносились во вкладку '07' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.
Во вкладке 'Средняя масса' необходимо, чтобы в столбце А формировался список артикулов за декабрь месяц, а в столбце Е считалась средняя масса по продукции за декабрь.
Проще говоря должно получиться так, как представлено на вкладке 'Средняя масса (2)'dmisviridov
Тогда они будут трехэтажными Именно поэтому Вам никто и не отвечает
Просто я с макросами вообще не знаком. Ладно тут AlexM написал макрос
1) А что надо изменить в макросе, чтобы он запускался автоматически и менял значения по мере ввода значений? 2) Что надо изменить в макросе, если в оригинальном файле не две вкладки ('01' и '07'), а все 30 или 31 в зависимости от месяца?
Цитата (Serge_007)
Тогда они будут трехэтажными Именно поэтому Вам никто и не отвечает
Просто я с макросами вообще не знаком. Ладно тут AlexM написал макрос
1) А что надо изменить в макросе, чтобы он запускался автоматически и менял значения по мере ввода значений? 2) Что надо изменить в макросе, если в оригинальном файле не две вкладки ('01' и '07'), а все 30 или 31 в зависимости от месяца?dmisviridov
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса" По первому вопросу пока ответить не могу, потому что не знаю что является фактом ввода значения. Понятно, что если макрос будет запускаться на ввод в каждую ячейку, то это не разумно. Возможно запуск надо делать после того как заполнены все ячейки строки. Если значение отсутствует, то должен быть прочерк или другой знак. Вам надо определится, какое событие должно вызвать запуск макроса. И еще запуск может быть не только по одному событию, а по нескольким. Если делать программу на все случаи, то она будет не простой. Например, ввод значений может быть не с клавиатуры, а вставкой из буфера обмена и не по одной строке, по две или больше. Вставка нового листа и тд. Одним соловом, если учитывать все, то код будет внушительный, а если запуск от кнопки, то ничего делать не надо.
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса" По первому вопросу пока ответить не могу, потому что не знаю что является фактом ввода значения. Понятно, что если макрос будет запускаться на ввод в каждую ячейку, то это не разумно. Возможно запуск надо делать после того как заполнены все ячейки строки. Если значение отсутствует, то должен быть прочерк или другой знак. Вам надо определится, какое событие должно вызвать запуск макроса. И еще запуск может быть не только по одному событию, а по нескольким. Если делать программу на все случаи, то она будет не простой. Например, ввод значений может быть не с клавиатуры, а вставкой из буфера обмена и не по одной строке, по две или больше. Вставка нового листа и тд. Одним соловом, если учитывать все, то код будет внушительный, а если запуск от кнопки, то ничего делать не надо.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Надо знакомится и не стоит их бояться и избегать. Сейчас, практически все вокруг нас работает под управлением программ. Телевизоры, телефоны, разумеется компьютеры и это не пугает и даже радует. Так почему обработка таблицы программой вас пугает? Конечно, обучить VB в рамках форума сложно, но для чего нужна каждая строка кода тут подскажут.
Цитата (dmisviridov)
с макросами вообще не знаком
Надо знакомится и не стоит их бояться и избегать. Сейчас, практически все вокруг нас работает под управлением программ. Телевизоры, телефоны, разумеется компьютеры и это не пугает и даже радует. Так почему обработка таблицы программой вас пугает? Конечно, обучить VB в рамках форума сложно, но для чего нужна каждая строка кода тут подскажут.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Я бы делал таким алгоритмом - перебираем исходные артикулы (цикл по листам), заносим в словарь, каждому в Item собираем значения в коллекцию без ключа (т.е. все). В конце определяем среднее по каждой коллекции, выгружаем. Код проще, короче, прозрачнее.
Я бы делал таким алгоритмом - перебираем исходные артикулы (цикл по листам), заносим в словарь, каждому в Item собираем значения в коллекцию без ключа (т.е. все). В конце определяем среднее по каждой коллекции, выгружаем. Код проще, короче, прозрачнее.Hugo
Хорошо что вы мне не предлагаете переписать код А коллекций должно быть по количеству листов, т.е. до 31-ой. На самом деле мне код самому что-то не нравится, но я так и написал "нет сегодня настроя думать". Праздники же.
Цитата (Hugo)
Я бы делал таким алгоритмом
Хорошо что вы мне не предлагаете переписать код А коллекций должно быть по количеству листов, т.е. до 31-ой. На самом деле мне код самому что-то не нравится, но я так и написал "нет сегодня настроя думать". Праздники же. AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Нет, я думаю в словаре (одном) к каждому артикулу привязана своя коллекция. В итоге имеем уникальные артикулы, каждому артикулу набор чисел, их количество. Больше ничего и не нужно.
Нет, я думаю в словаре (одном) к каждому артикулу привязана своя коллекция. В итоге имеем уникальные артикулы, каждому артикулу набор чисел, их количество. Больше ничего и не нужно.Hugo
Писать код на этом примере лениво, да и незачем - ведь уже есть решение Но вот механизм "коллекции в словаре" (делал на другом форуме, заготовка): [vba]
Код
Sub PereborFailov() 'коллекция в словаре Dim a, i&, t$, Dic As Object Dim el, col
a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value Set Dic = CreateObject("Scripting.Dictionary") With Dic .CompareMode = 1 For i = 1 To UBound(a) t = a(i, 1) If Not .exists(t) Then .Add t, New Collection .Item(t).Add a(i, 2) & "|" & a(i, 3) & "|" & i Next End With
For Each el In Dic.keys Debug.Print "Открываем файл " & el For Each col In Dic.Item(el) Debug.Print "Ищем данные " & col Next Debug.Print "Закрываем файл " & el Next
End Sub
[/vba]
Писать код на этом примере лениво, да и незачем - ведь уже есть решение Но вот механизм "коллекции в словаре" (делал на другом форуме, заготовка): [vba]
Код
Sub PereborFailov() 'коллекция в словаре Dim a, i&, t$, Dic As Object Dim el, col
a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value Set Dic = CreateObject("Scripting.Dictionary") With Dic .CompareMode = 1 For i = 1 To UBound(a) t = a(i, 1) If Not .exists(t) Then .Add t, New Collection .Item(t).Add a(i, 2) & "|" & a(i, 3) & "|" & i Next End With
For Each el In Dic.keys Debug.Print "Открываем файл " & el For Each col In Dic.Item(el) Debug.Print "Ищем данные " & col Next Debug.Print "Закрываем файл " & el Next
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"
И у меня тогда ещё вопрос, а что если в оригинале есть ещё вкладки с которыми макрос не должен работать, т.е. - Лист 1 - 01 - .... - 31 - Средняя скорость - Выпуск продукции - Отходы. Так вот макрос должен работать только с вкладками от 01 до 31 (или 30).
Цитата (AlexM)
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"
И у меня тогда ещё вопрос, а что если в оригинале есть ещё вкладки с которыми макрос не должен работать, т.е. - Лист 1 - 01 - .... - 31 - Средняя скорость - Выпуск продукции - Отходы. Так вот макрос должен работать только с вкладками от 01 до 31 (или 30).dmisviridov
На случай "а что если" можно написать "например так": обрабатываем - только конкретные имена листов (содержащиеся в списке, массиве) - только листы с второго по тридцать второй - только листы, названия которых есть число - только листы, начинающиеся с цифр - все листы, идущие после первого, и до листа, называющегося "Средняя скорость" - да мало ли как можно придумать в случае "а что если"
На случай "а что если" можно написать "например так": обрабатываем - только конкретные имена листов (содержащиеся в списке, массиве) - только листы с второго по тридцать второй - только листы, названия которых есть число - только листы, начинающиеся с цифр - все листы, идущие после первого, и до листа, называющегося "Средняя скорость" - да мало ли как можно придумать в случае "а что если"Hugo
Если листы, которые надо обрабатывать имеют имена как вы написали 01, 02, ..., 29, 30, 31, то замените сторку [vba]
Код
If Sheets(i).Name <> "Средняя масса" Then
[/vba] на строку [vba]
Код
If IsNumeric(Sheets(i).Name) Then
[/vba] Эта строка проверяет является ли имя листа числом, если да то макрос обрабатывает этот лист. Листы с не числовыми именами будут пропускаться.
Если листы, которые надо обрабатывать имеют имена как вы написали 01, 02, ..., 29, 30, 31, то замените сторку [vba]
Код
If Sheets(i).Name <> "Средняя масса" Then
[/vba] на строку [vba]
Код
If IsNumeric(Sheets(i).Name) Then
[/vba] Эта строка проверяет является ли имя листа числом, если да то макрос обрабатывает этот лист. Листы с не числовыми именами будут пропускаться.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Сообщение отредактировал AlexM - Суббота, 05.01.2013, 18:39
AlexM можно немного тупой вопрос: Сейчас попытался перенести код макроса в оригинальный файл и не получилось. Может есть на сайте тема как переносить макросы с сайта в оригинальный файл?
AlexM можно немного тупой вопрос: Сейчас попытался перенести код макроса в оригинальный файл и не получилось. Может есть на сайте тема как переносить макросы с сайта в оригинальный файл?dmisviridov
Нету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо
Конечно не надо, что может быть проще ВЫДЕЛИЛ, потом CTRL+C перешёл в свой файл и нажал CTRL+V. Это сделает даже обезьяна, но макрос не срабатывает. В файле, который я получил от Алекса работает и достаточно хорошо, а вот я когда его переношу, то он не срабатывает.
Цитата (Serge_007)
Нету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо
Конечно не надо, что может быть проще ВЫДЕЛИЛ, потом CTRL+C перешёл в свой файл и нажал CTRL+V. Это сделает даже обезьяна, но макрос не срабатывает. В файле, который я получил от Алекса работает и достаточно хорошо, а вот я когда его переношу, то он не срабатывает.dmisviridov