Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сводная ведомость - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Сводная ведомость
dmisviridov Дата: Пятница, 04.01.2013, 12:34 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

Выпускалась продукция 1 декабря с разными Артикулами в течение смены и они заносились во вкладку '01' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.

Выпускалась продукция 7 декабря с разными Артикулами в течение смены и они заносились во вкладку '07' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.

Во вкладке 'Средняя масса' необходимо, чтобы в столбце А формировался список артикулов за декабрь месяц, а в столбце Е считалась средняя масса по продукции за декабрь.

Проще говоря должно получиться так, как представлено на вкладке 'Средняя масса (2)'
К сообщению приложен файл: 9286824.xls (23.0 Kb)


Сообщение отредактировал dmisviridov - Пятница, 04.01.2013, 12:44
 
Ответить
СообщениеВыпускалась продукция 1 декабря с разными Артикулами в течение смены и они заносились во вкладку '01' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.

Выпускалась продукция 7 декабря с разными Артикулами в течение смены и они заносились во вкладку '07' с столбец В. Также по этой продукции подсчитывалась средняя масса и заносилась в столбец J, выпущенная за день и в столбец К - за ночь.

Во вкладке 'Средняя масса' необходимо, чтобы в столбце А формировался список артикулов за декабрь месяц, а в столбце Е считалась средняя масса по продукции за декабрь.

Проще говоря должно получиться так, как представлено на вкладке 'Средняя масса (2)'

Автор - dmisviridov
Дата добавления - 04.01.2013 в 12:34
AlexM Дата: Суббота, 05.01.2013, 01:42 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Что-то нет сегодня настроя думать. ;-)
К сообщению приложен файл: 9286824_new1.xls (43.0 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеЧто-то нет сегодня настроя думать. ;-)

Автор - AlexM
Дата добавления - 05.01.2013 в 01:42
dmisviridov Дата: Суббота, 05.01.2013, 15:17 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

А если это сделать формулами EXCEL, а не макросами?
 
Ответить
СообщениеА если это сделать формулами EXCEL, а не макросами?

Автор - dmisviridov
Дата добавления - 05.01.2013 в 15:17
Serge_007 Дата: Суббота, 05.01.2013, 15:20 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (dmisviridov)
если это сделать формулами EXCEL

Тогда они будут трехэтажными smile

Именно поэтому Вам никто и не отвечает


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (dmisviridov)
если это сделать формулами EXCEL

Тогда они будут трехэтажными smile

Именно поэтому Вам никто и не отвечает

Автор - Serge_007
Дата добавления - 05.01.2013 в 15:20
dmisviridov Дата: Суббота, 05.01.2013, 15:39 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

Цитата (Serge_007)
Тогда они будут трехэтажными Именно поэтому Вам никто и не отвечает


Просто я с макросами вообще не знаком.
Ладно тут AlexM написал макрос

1) А что надо изменить в макросе, чтобы он запускался автоматически и менял значения по мере ввода значений?
2) Что надо изменить в макросе, если в оригинальном файле не две вкладки ('01' и '07'), а все 30 или 31 в зависимости от месяца?
 
Ответить
Сообщение
Цитата (Serge_007)
Тогда они будут трехэтажными Именно поэтому Вам никто и не отвечает


Просто я с макросами вообще не знаком.
Ладно тут AlexM написал макрос

1) А что надо изменить в макросе, чтобы он запускался автоматически и менял значения по мере ввода значений?
2) Что надо изменить в макросе, если в оригинальном файле не две вкладки ('01' и '07'), а все 30 или 31 в зависимости от месяца?

Автор - dmisviridov
Дата добавления - 05.01.2013 в 15:39
AlexM Дата: Суббота, 05.01.2013, 17:08 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"
По первому вопросу пока ответить не могу, потому что не знаю что является фактом ввода значения. Понятно, что если макрос будет запускаться на ввод в каждую ячейку, то это не разумно. Возможно запуск надо делать после того как заполнены все ячейки строки. Если значение отсутствует, то должен быть прочерк или другой знак. Вам надо определится, какое событие должно вызвать запуск макроса.
И еще запуск может быть не только по одному событию, а по нескольким. Если делать программу на все случаи, то она будет не простой. Например, ввод значений может быть не с клавиатуры, а вставкой из буфера обмена и не по одной строке, по две или больше. Вставка нового листа и тд.
Одним соловом, если учитывать все, то код будет внушительный, а если запуск от кнопки, то ничего делать не надо.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеНачну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"
По первому вопросу пока ответить не могу, потому что не знаю что является фактом ввода значения. Понятно, что если макрос будет запускаться на ввод в каждую ячейку, то это не разумно. Возможно запуск надо делать после того как заполнены все ячейки строки. Если значение отсутствует, то должен быть прочерк или другой знак. Вам надо определится, какое событие должно вызвать запуск макроса.
И еще запуск может быть не только по одному событию, а по нескольким. Если делать программу на все случаи, то она будет не простой. Например, ввод значений может быть не с клавиатуры, а вставкой из буфера обмена и не по одной строке, по две или больше. Вставка нового листа и тд.
Одним соловом, если учитывать все, то код будет внушительный, а если запуск от кнопки, то ничего делать не надо.

Автор - AlexM
Дата добавления - 05.01.2013 в 17:08
AlexM Дата: Суббота, 05.01.2013, 17:17 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Цитата (dmisviridov)
с макросами вообще не знаком

Надо знакомится и не стоит их бояться и избегать.
Сейчас, практически все вокруг нас работает под управлением программ. Телевизоры, телефоны, разумеется компьютеры и это не пугает и даже радует. Так почему обработка таблицы программой вас пугает?
Конечно, обучить VB в рамках форума сложно, но для чего нужна каждая строка кода тут подскажут.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (dmisviridov)
с макросами вообще не знаком

Надо знакомится и не стоит их бояться и избегать.
Сейчас, практически все вокруг нас работает под управлением программ. Телевизоры, телефоны, разумеется компьютеры и это не пугает и даже радует. Так почему обработка таблицы программой вас пугает?
Конечно, обучить VB в рамках форума сложно, но для чего нужна каждая строка кода тут подскажут.

Автор - AlexM
Дата добавления - 05.01.2013 в 17:17
Hugo Дата: Суббота, 05.01.2013, 17:38 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Я бы делал таким алгоритмом - перебираем исходные артикулы (цикл по листам), заносим в словарь, каждому в Item собираем значения в коллекцию без ключа (т.е. все).
В конце определяем среднее по каждой коллекции, выгружаем.
Код проще, короче, прозрачнее.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЯ бы делал таким алгоритмом - перебираем исходные артикулы (цикл по листам), заносим в словарь, каждому в Item собираем значения в коллекцию без ключа (т.е. все).
В конце определяем среднее по каждой коллекции, выгружаем.
Код проще, короче, прозрачнее.

Автор - Hugo
Дата добавления - 05.01.2013 в 17:38
AlexM Дата: Суббота, 05.01.2013, 18:00 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Цитата (Hugo)
Я бы делал таким алгоритмом

Хорошо что вы мне не предлагаете переписать код biggrin
А коллекций должно быть по количеству листов, т.е. до 31-ой.
На самом деле мне код самому что-то не нравится, но я так и написал "нет сегодня настроя думать". Праздники же. smile



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (Hugo)
Я бы делал таким алгоритмом

Хорошо что вы мне не предлагаете переписать код biggrin
А коллекций должно быть по количеству листов, т.е. до 31-ой.
На самом деле мне код самому что-то не нравится, но я так и написал "нет сегодня настроя думать". Праздники же. smile

Автор - AlexM
Дата добавления - 05.01.2013 в 18:00
Hugo Дата: Суббота, 05.01.2013, 18:02 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Нет, я думаю в словаре (одном) к каждому артикулу привязана своя коллекция.
В итоге имеем уникальные артикулы, каждому артикулу набор чисел, их количество. Больше ничего и не нужно.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНет, я думаю в словаре (одном) к каждому артикулу привязана своя коллекция.
В итоге имеем уникальные артикулы, каждому артикулу набор чисел, их количество. Больше ничего и не нужно.

Автор - Hugo
Дата добавления - 05.01.2013 в 18:02
AlexM Дата: Суббота, 05.01.2013, 18:07 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Интересно, мы еще такое не проходили. wink



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеИнтересно, мы еще такое не проходили. wink

Автор - AlexM
Дата добавления - 05.01.2013 в 18:07
Hugo Дата: Суббота, 05.01.2013, 18:11 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Писать код на этом примере лениво, да и незачем - ведь уже есть решение smile
Но вот механизм "коллекции в словаре" (делал на другом форуме, заготовка):
[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]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПисать код на этом примере лениво, да и незачем - ведь уже есть решение smile
Но вот механизм "коллекции в словаре" (делал на другом форуме, заготовка):
[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]

Автор - Hugo
Дата добавления - 05.01.2013 в 18:11
dmisviridov Дата: Суббота, 05.01.2013, 18:18 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

Цитата (AlexM)
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"


И у меня тогда ещё вопрос, а что если в оригинале есть ещё вкладки с которыми макрос не должен работать, т.е.
- Лист 1
- 01
- ....
- 31
- Средняя скорость
- Выпуск продукции
- Отходы.
Так вот макрос должен работать только с вкладками от 01 до 31 (или 30).
 
Ответить
Сообщение
Цитата (AlexM)
Начну со второго вопроса. Ничего менять не надо. Макрос обрабатывает любое количество листов с любыми именами кроме листа "Средняя масса"


И у меня тогда ещё вопрос, а что если в оригинале есть ещё вкладки с которыми макрос не должен работать, т.е.
- Лист 1
- 01
- ....
- 31
- Средняя скорость
- Выпуск продукции
- Отходы.
Так вот макрос должен работать только с вкладками от 01 до 31 (или 30).

Автор - dmisviridov
Дата добавления - 05.01.2013 в 18:18
AlexM Дата: Суббота, 05.01.2013, 18:24 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Цитата (Hugo)
вот механизм "коллекции в словаре"

Спасибо изучу.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (Hugo)
вот механизм "коллекции в словаре"

Спасибо изучу.

Автор - AlexM
Дата добавления - 05.01.2013 в 18:24
Hugo Дата: Суббота, 05.01.2013, 18:32 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
На случай "а что если" можно написать "например так":
обрабатываем
- только конкретные имена листов (содержащиеся в списке, массиве)
- только листы с второго по тридцать второй
- только листы, названия которых есть число
- только листы, начинающиеся с цифр
- все листы, идущие после первого, и до листа, называющегося "Средняя скорость"
- да мало ли как можно придумать в случае "а что если"


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНа случай "а что если" можно написать "например так":
обрабатываем
- только конкретные имена листов (содержащиеся в списке, массиве)
- только листы с второго по тридцать второй
- только листы, названия которых есть число
- только листы, начинающиеся с цифр
- все листы, идущие после первого, и до листа, называющегося "Средняя скорость"
- да мало ли как можно придумать в случае "а что если"

Автор - Hugo
Дата добавления - 05.01.2013 в 18:32
AlexM Дата: Суббота, 05.01.2013, 18:37 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Если листы, которые надо обрабатывать имеют имена как вы написали 01, 02, ..., 29, 30, 31, то замените сторку
[vba]
Код
If Sheets(i).Name <> "Средняя масса" Then
[/vba]
на строку
[vba]
Код
If IsNumeric(Sheets(i).Name) Then
[/vba]
Эта строка проверяет является ли имя листа числом, если да то макрос обрабатывает этот лист. Листы с не числовыми именами будут пропускаться.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Суббота, 05.01.2013, 18:39
 
Ответить
СообщениеЕсли листы, которые надо обрабатывать имеют имена как вы написали 01, 02, ..., 29, 30, 31, то замените сторку
[vba]
Код
If Sheets(i).Name <> "Средняя масса" Then
[/vba]
на строку
[vba]
Код
If IsNumeric(Sheets(i).Name) Then
[/vba]
Эта строка проверяет является ли имя листа числом, если да то макрос обрабатывает этот лист. Листы с не числовыми именами будут пропускаться.

Автор - AlexM
Дата добавления - 05.01.2013 в 18:37
dmisviridov Дата: Суббота, 05.01.2013, 19:29 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

AlexM можно немного тупой вопрос: Сейчас попытался перенести код макроса в оригинальный файл и не получилось. Может есть на сайте тема как переносить макросы с сайта в оригинальный файл?
 
Ответить
СообщениеAlexM можно немного тупой вопрос: Сейчас попытался перенести код макроса в оригинальный файл и не получилось. Может есть на сайте тема как переносить макросы с сайта в оригинальный файл?

Автор - dmisviridov
Дата добавления - 05.01.2013 в 19:29
Serge_007 Дата: Суббота, 05.01.2013, 19:31 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Нету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеНету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо smile

Автор - Serge_007
Дата добавления - 05.01.2013 в 19:31
dmisviridov Дата: Суббота, 05.01.2013, 19:39 | Сообщение № 19
Группа: Пользователи
Ранг: Участник
Сообщений: 59
Репутация: 0 ±
Замечаний: 20% ±

Цитата (Serge_007)
Нету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо


Конечно не надо, что может быть проще ВЫДЕЛИЛ, потом CTRL+C перешёл в свой файл и нажал CTRL+V. Это сделает даже обезьяна, но макрос не срабатывает. В файле, который я получил от Алекса работает и достаточно хорошо, а вот я когда его переношу, то он не срабатывает.
 
Ответить
Сообщение
Цитата (Serge_007)
Нету такой темы. И быть не может, потому как скопировать и вставить код - образования не надо


Конечно не надо, что может быть проще ВЫДЕЛИЛ, потом CTRL+C перешёл в свой файл и нажал CTRL+V. Это сделает даже обезьяна, но макрос не срабатывает. В файле, который я получил от Алекса работает и достаточно хорошо, а вот я когда его переношу, то он не срабатывает.

Автор - dmisviridov
Дата добавления - 05.01.2013 в 19:39
Serge_007 Дата: Суббота, 05.01.2013, 19:42 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (dmisviridov)
Это сделает даже обезьяна

Тогда в чём проблема?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (dmisviridov)
Это сделает даже обезьяна

Тогда в чём проблема?

Автор - Serge_007
Дата добавления - 05.01.2013 в 19:42
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!