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

Вход

Регистрация

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

 

= Мир MS Excel/Сумма значений с разных листов книги - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Сумма значений с разных листов книги
Ed_Vard Дата: Понедельник, 07.11.2011, 17:34 | Сообщение № 21
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem, Доброго времени суток!
Пример упростил еще
Долго думал, как это все описать - примерно описал на листе Промежуточный результат!
К сообщению приложен файл: 7253328.rar (43.4 Kb)
 
Ответить
Сообщениеnilem, Доброго времени суток!
Пример упростил еще
Долго думал, как это все описать - примерно описал на листе Промежуточный результат!

Автор - Ed_Vard
Дата добавления - 07.11.2011 в 17:34
nilem Дата: Понедельник, 07.11.2011, 21:05 | Сообщение № 22
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Quote
... далее для компановки можно использовать вот такую связку A+L+F+H+I - если по столбцу Е стоит ИСХ, а если КОР - то A+L+F+J+K
Это для того, чтобы не использовать большое количество условий а только условие в столбце Е. Т.е. строка с КОР должна заменить стоку с ИСХ если A+L+F+J+K равно A+L+F+H+I. Затем уже производим вычисление как в макросе Сверка_2_БК

Ну, теперь-то все понятно smile

Вот второй шаг. Кнопка "PUSH 1" делает то же, что и раньше, "PUSH 2" заменяет исходные строки корректирующими строками. Сверка_2_БК у нас вычисляет стр. и нак. части. А вот после "PUSH 2" что делать? Получившиеся строки тоже надо как-то скомбинировать. Как?

И еще. В макросе имеет значение порядок следования листов. Чтобы не получилось так: в выходном массиве сначала идут корректировки, а потом исходные данные.
Это всегда будет обеспечено или нужно в макросе что-нибудь предусмотреть?
К сообщению приложен файл: 4796821.zip (53.8 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Понедельник, 07.11.2011, 21:06
 
Ответить
Сообщение
Quote
... далее для компановки можно использовать вот такую связку A+L+F+H+I - если по столбцу Е стоит ИСХ, а если КОР - то A+L+F+J+K
Это для того, чтобы не использовать большое количество условий а только условие в столбце Е. Т.е. строка с КОР должна заменить стоку с ИСХ если A+L+F+J+K равно A+L+F+H+I. Затем уже производим вычисление как в макросе Сверка_2_БК

Ну, теперь-то все понятно smile

Вот второй шаг. Кнопка "PUSH 1" делает то же, что и раньше, "PUSH 2" заменяет исходные строки корректирующими строками. Сверка_2_БК у нас вычисляет стр. и нак. части. А вот после "PUSH 2" что делать? Получившиеся строки тоже надо как-то скомбинировать. Как?

И еще. В макросе имеет значение порядок следования листов. Чтобы не получилось так: в выходном массиве сначала идут корректировки, а потом исходные данные.
Это всегда будет обеспечено или нужно в макросе что-нибудь предусмотреть?

Автор - nilem
Дата добавления - 07.11.2011 в 21:05
Ed_Vard Дата: Вторник, 08.11.2011, 00:46 | Сообщение № 23
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
Получившиеся строки тоже надо как-то скомбинировать. Как?

Теперь опять используем связку с листа Сверка A+L: т.е. если строки на листе промежуточный(2) совпадают по A+L - то складываем данные в столбцах N,O,P,Q по этим строкам и находим разность N-O,P-Q и прибавляем к разности - которая была вычислена на листе Сверка по данной связке A+L и результат заносим в U и V.
А - я так думаю, что немного непонятно объяснил sad
Мы получили после "PUSH 2" данные с которыми можно работать и макрос Сверка_2_БК это уже итоговым получаеться - т.е. вот как в макросе
Code
Sub Сверка_2_БК()
Dim x, i&, wshList(), bu, t()
wshList = Array("промежуточный (2)") 'здесь получаеться вместо всех листов я подставил лист промежуточный (2)

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     x = [a4].CurrentRegion.Value
     For i = 2 To UBound(x)
         .Item(x(i, 1) & x(i, 12)) = Array(x(i, 14) - x(i, 15), x(i, 16) - x(i, 17))
     Next i

     For Each bu In wshList
         x = Sheets(bu).[a4].CurrentRegion.Value
         For i = 2 To UBound(x)
             If .Exists(x(i, 1) & x(i, 12)) Then
                 t = .Item(x(i, 1) & x(i, 12))
                 t(0) = Round(t(0) + x(i, 14) - x(i, 15), 2)
                 t(1) = Round(t(1) + x(i, 16) - x(i, 17), 2)
                 .Item(x(i, 1) & x(i, 12)) = t
             End If
         Next i
     Next bu
      
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("Сверка").[u5:v5].Resize(.Count).Value = x
End With

End Sub

Вот так будет завершающий этап.
Вернее этот макрос показывает завершающий результат - поскольку я так думаю - что в Вашем варианте ему уже места нет, настолько все переделано - это я просто чтобы не мучаться с формулами подправил этот макрос
Т.е. теперь это все три действия надо как то свести в одну кучу sad - без дополнительных листов и кнопок

Листы будут следовать так - как указано и будут еще добавляться, поэтому нужно учесть возможность добавления для расчета нужных листов! Они идут последовательно по отчетным периодам - так что по полседовательности листов ничего не нужно.
Корректировки в одном расчетном периоде могут идти только за предыдущий период - т.е. например на листе 1-2011 могут быть корректировки только за перриод 1-2010,2-2010 но никак за 1-2011! Едиственное что - можно ли както учесть что может возникнуть такая ситуация - что например на листе 1-2011 может быть корректировка на уже откорректированную на листе 2-2010 за перриод 1-2010 - т.е. я так думаю, что данные на листе промежуточный (2) формируются последовательно по прохождению листов - и по идее последней будет корректировка, которая будет на листе 1-2011 - так вот последнюю и нужно будет брать в расчет!
Ну вот как то так!
 
Ответить
Сообщение
Quote (nilem)
Получившиеся строки тоже надо как-то скомбинировать. Как?

Теперь опять используем связку с листа Сверка A+L: т.е. если строки на листе промежуточный(2) совпадают по A+L - то складываем данные в столбцах N,O,P,Q по этим строкам и находим разность N-O,P-Q и прибавляем к разности - которая была вычислена на листе Сверка по данной связке A+L и результат заносим в U и V.
А - я так думаю, что немного непонятно объяснил sad
Мы получили после "PUSH 2" данные с которыми можно работать и макрос Сверка_2_БК это уже итоговым получаеться - т.е. вот как в макросе
Code
Sub Сверка_2_БК()
Dim x, i&, wshList(), bu, t()
wshList = Array("промежуточный (2)") 'здесь получаеться вместо всех листов я подставил лист промежуточный (2)

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     x = [a4].CurrentRegion.Value
     For i = 2 To UBound(x)
         .Item(x(i, 1) & x(i, 12)) = Array(x(i, 14) - x(i, 15), x(i, 16) - x(i, 17))
     Next i

     For Each bu In wshList
         x = Sheets(bu).[a4].CurrentRegion.Value
         For i = 2 To UBound(x)
             If .Exists(x(i, 1) & x(i, 12)) Then
                 t = .Item(x(i, 1) & x(i, 12))
                 t(0) = Round(t(0) + x(i, 14) - x(i, 15), 2)
                 t(1) = Round(t(1) + x(i, 16) - x(i, 17), 2)
                 .Item(x(i, 1) & x(i, 12)) = t
             End If
         Next i
     Next bu
      
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("Сверка").[u5:v5].Resize(.Count).Value = x
End With

End Sub

Вот так будет завершающий этап.
Вернее этот макрос показывает завершающий результат - поскольку я так думаю - что в Вашем варианте ему уже места нет, настолько все переделано - это я просто чтобы не мучаться с формулами подправил этот макрос
Т.е. теперь это все три действия надо как то свести в одну кучу sad - без дополнительных листов и кнопок

Листы будут следовать так - как указано и будут еще добавляться, поэтому нужно учесть возможность добавления для расчета нужных листов! Они идут последовательно по отчетным периодам - так что по полседовательности листов ничего не нужно.
Корректировки в одном расчетном периоде могут идти только за предыдущий период - т.е. например на листе 1-2011 могут быть корректировки только за перриод 1-2010,2-2010 но никак за 1-2011! Едиственное что - можно ли както учесть что может возникнуть такая ситуация - что например на листе 1-2011 может быть корректировка на уже откорректированную на листе 2-2010 за перриод 1-2010 - т.е. я так думаю, что данные на листе промежуточный (2) формируются последовательно по прохождению листов - и по идее последней будет корректировка, которая будет на листе 1-2011 - так вот последнюю и нужно будет брать в расчет!
Ну вот как то так!

Автор - Ed_Vard
Дата добавления - 08.11.2011 в 00:46
nilem Дата: Вторник, 08.11.2011, 11:53 | Сообщение № 24
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот шаг три. Складываем N,O,P,Q из "Сверка" и "промежуточный", а разность стр. и нак. выводим в U, V. Правильно?
Проверяйте.

Может, лучше так и оставить 3 кнопки - можно визуально как-то контролировать процесс?
К сообщению приложен файл: 5911595.zip (56.1 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВот шаг три. Складываем N,O,P,Q из "Сверка" и "промежуточный", а разность стр. и нак. выводим в U, V. Правильно?
Проверяйте.

Может, лучше так и оставить 3 кнопки - можно визуально как-то контролировать процесс?

Автор - nilem
Дата добавления - 08.11.2011 в 11:53
Ed_Vard Дата: Вторник, 08.11.2011, 14:42 | Сообщение № 25
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
Вот шаг три. Складываем N,O,P,Q из "Сверка" и "промежуточный", а разность стр. и нак. выводим в U, V. Правильно?
Проверяйте.

Не совсем так! лист Сверка - это и должен быть итоговым - в нем получаються данные за текущий расчетный период - т.е. в нашем случае за 2-2011 - и на нем нам нужно получить итоговый результат - к разности на листе Сверка между t(0)=N-O и t(1)=P-Q прибавить зазность с листа промежуточный t(2)=N-O и t(3)=P-Q - т.е. вот так n(0)=t(0)+t(2) и n(1)=t(1)+t(3) - и вот эти n нужно вывести в U, V. Это как бы получаеться нарастающим итогом начиная с 1-2010.
технологически это выглядит так:
1. На лист Сверка получаем данные из файлов xml за текущий расчетный перриод - в нашем случае за 2-2011 и производим вычисление t(0)=N-O и t(1)=P-Q
2. На основании данных с листа Серка при связке A+L - выбираем людей с листов 1-2010,2-2010,1-2011,КОРР-ТП за предыдущие расчетные перриоды (это они у нас заносяться при нажатии "PUSH 1" на лист промежуточный )
3. При связке A+L+F+J+K и A+L+F+H+I заменяем ИСХ на КОР при нажатии "PUSH 2" на листе промежуточный
4. Нужно теперь на листе промежуточный сложить совпавшие данные при связке A+L и получить разность t(2)=N-O и t(3)=P-Q
5. На листе Сверка произвести сложение n(0)=t(0)+t(2) и n(1)=t(1)+t(3) и внести данные в U и V.

Т.е. Если вы нажмете кнопку ВР2_БК на листе сверка - то увидите как заносяться данные - только там не учитываються эти КОР - они там просто сумируються как обычные! Это просто для аналогии!
Вот так вот должно получиться только с учетом всех манипуляций - т.е. листа промежуточные быть не должно - все вычисления в массиве!
 
Ответить
Сообщение
Quote (nilem)
Вот шаг три. Складываем N,O,P,Q из "Сверка" и "промежуточный", а разность стр. и нак. выводим в U, V. Правильно?
Проверяйте.

Не совсем так! лист Сверка - это и должен быть итоговым - в нем получаються данные за текущий расчетный период - т.е. в нашем случае за 2-2011 - и на нем нам нужно получить итоговый результат - к разности на листе Сверка между t(0)=N-O и t(1)=P-Q прибавить зазность с листа промежуточный t(2)=N-O и t(3)=P-Q - т.е. вот так n(0)=t(0)+t(2) и n(1)=t(1)+t(3) - и вот эти n нужно вывести в U, V. Это как бы получаеться нарастающим итогом начиная с 1-2010.
технологически это выглядит так:
1. На лист Сверка получаем данные из файлов xml за текущий расчетный перриод - в нашем случае за 2-2011 и производим вычисление t(0)=N-O и t(1)=P-Q
2. На основании данных с листа Серка при связке A+L - выбираем людей с листов 1-2010,2-2010,1-2011,КОРР-ТП за предыдущие расчетные перриоды (это они у нас заносяться при нажатии "PUSH 1" на лист промежуточный )
3. При связке A+L+F+J+K и A+L+F+H+I заменяем ИСХ на КОР при нажатии "PUSH 2" на листе промежуточный
4. Нужно теперь на листе промежуточный сложить совпавшие данные при связке A+L и получить разность t(2)=N-O и t(3)=P-Q
5. На листе Сверка произвести сложение n(0)=t(0)+t(2) и n(1)=t(1)+t(3) и внести данные в U и V.

Т.е. Если вы нажмете кнопку ВР2_БК на листе сверка - то увидите как заносяться данные - только там не учитываються эти КОР - они там просто сумируються как обычные! Это просто для аналогии!
Вот так вот должно получиться только с учетом всех манипуляций - т.е. листа промежуточные быть не должно - все вычисления в массиве!

Автор - Ed_Vard
Дата добавления - 08.11.2011 в 14:42
nilem Дата: Вторник, 08.11.2011, 16:30 | Сообщение № 26
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
По-моему, все правильно. Только результат надо выводить, видимо, сразу на Сверку.
Попробуйте изменять N,O,P,Q на листе Сверка и понажимать кнопочки. Вроде бы все сходится.
К сообщению приложен файл: 3617601.zip (46.1 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеПо-моему, все правильно. Только результат надо выводить, видимо, сразу на Сверку.
Попробуйте изменять N,O,P,Q на листе Сверка и понажимать кнопочки. Вроде бы все сходится.

Автор - nilem
Дата добавления - 08.11.2011 в 16:30
Ed_Vard Дата: Вторник, 08.11.2011, 17:23 | Сообщение № 27
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
По-моему, все правильно. Только результат надо выводить, видимо, сразу на Сверку.
Попробуйте изменять N,O,P,Q на листе Сверка и понажимать кнопочки. Вроде бы все сходится.


Кажеться -да - вроде все нормально!
Т.е. от листа промежуточный уйти не получиться и собрать все в один макрос?
 
Ответить
Сообщение
Quote (nilem)
По-моему, все правильно. Только результат надо выводить, видимо, сразу на Сверку.
Попробуйте изменять N,O,P,Q на листе Сверка и понажимать кнопочки. Вроде бы все сходится.


Кажеться -да - вроде все нормально!
Т.е. от листа промежуточный уйти не получиться и собрать все в один макрос?

Автор - Ed_Vard
Дата добавления - 08.11.2011 в 17:23
nilem Дата: Вторник, 08.11.2011, 18:28 | Сообщение № 28
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Получится, только сначала проверьте все как следует. Потому что потом уже точно не разобраться smile


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеПолучится, только сначала проверьте все как следует. Потому что потом уже точно не разобраться smile

Автор - nilem
Дата добавления - 08.11.2011 в 18:28
Гость Дата: Вторник, 08.11.2011, 20:28 | Сообщение № 29
Группа: Гости
Quote (nilem)
Получится, только сначала проверьте все как следует. Потому что потом уже точно не разобраться smile


А может как то по блокам с поянениями - а то если не разобраться - то это будет плохо - так как я всетаки хочу разобраться и при необходимости внести изменения если понадобиться!
Я понимаю - что это может наглость с моей стороны - ноесли что-то нужно будет изменить - я вообще запутаюсь!
 
Ответить
Сообщение
Quote (nilem)
Получится, только сначала проверьте все как следует. Потому что потом уже точно не разобраться smile


А может как то по блокам с поянениями - а то если не разобраться - то это будет плохо - так как я всетаки хочу разобраться и при необходимости внести изменения если понадобиться!
Я понимаю - что это может наглость с моей стороны - ноесли что-то нужно будет изменить - я вообще запутаюсь!

Автор - Гость
Дата добавления - 08.11.2011 в 20:28
nilem Дата: Среда, 09.11.2011, 12:04 | Сообщение № 30
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот с одной кнопкой с блоками. Sub ertert() находится в модуле ModSverka.
К сообщению приложен файл: 9468818.zip (50.4 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВот с одной кнопкой с блоками. Sub ertert() находится в модуле ModSverka.

Автор - nilem
Дата добавления - 09.11.2011 в 12:04
Ed_Vard Дата: Пятница, 11.11.2011, 10:21 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem, Да - сейчас проверяю в работе - пока работает нормально!
Большое спасибо!
Чуть позже напишу в личку smile !
 
Ответить
Сообщениеnilem, Да - сейчас проверяю в работе - пока работает нормально!
Большое спасибо!
Чуть позже напишу в личку smile !

Автор - Ed_Vard
Дата добавления - 11.11.2011 в 10:21
Ed_Vard Дата: Воскресенье, 26.02.2012, 19:59 | Сообщение № 32
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времеи суток, уважаемые форумчане.
В связи с затянувшейся командировкой не не закончил с данным макросом sad за это время возник вопрос
в этом макросе объявлятеся вот такой массив wshList = Array("1-2010", "2-2010", "1-2011"), где каждое значение - это определенный лист! в свзя с тем, что приходиться постоянно менять - какие листы учитывать, а какие нет возникла идея использовать чекбоксы - т.е. какждому листу будет соответствовать 1 чекбокс. При проверке - что чекбокс активирован - то лист к которому относиться данный чекбокс добавляеться в массив.
Проблема в том - что не могу понять - как можно переменную добавить в данный массив!
Подскажите - как это можно реализовать.
 
Ответить
СообщениеДоброго времеи суток, уважаемые форумчане.
В связи с затянувшейся командировкой не не закончил с данным макросом sad за это время возник вопрос
в этом макросе объявлятеся вот такой массив wshList = Array("1-2010", "2-2010", "1-2011"), где каждое значение - это определенный лист! в свзя с тем, что приходиться постоянно менять - какие листы учитывать, а какие нет возникла идея использовать чекбоксы - т.е. какждому листу будет соответствовать 1 чекбокс. При проверке - что чекбокс активирован - то лист к которому относиться данный чекбокс добавляеться в массив.
Проблема в том - что не могу понять - как можно переменную добавить в данный массив!
Подскажите - как это можно реализовать.

Автор - Ed_Vard
Дата добавления - 26.02.2012 в 19:59
Hugo Дата: Воскресенье, 26.02.2012, 22:23 | Сообщение № 33
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Можно сделать разными способами -
1. можно перебирать массив Array("1-2010", "2-2010", "1-2011", "КОРР-ТП") и в соответствии с чекбоксом текущего листа формировать массив wshList - или через Redim Preserve наращивать, или собирать строку названий, которую позже разбить в массив с помощью Split
2. можно в существующем коде после For Each bu In wshList добавить проверку, что чекбокс этого bu в нужном состоянии.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеМожно сделать разными способами -
1. можно перебирать массив Array("1-2010", "2-2010", "1-2011", "КОРР-ТП") и в соответствии с чекбоксом текущего листа формировать массив wshList - или через Redim Preserve наращивать, или собирать строку названий, которую позже разбить в массив с помощью Split
2. можно в существующем коде после For Each bu In wshList добавить проверку, что чекбокс этого bu в нужном состоянии.

Автор - Hugo
Дата добавления - 26.02.2012 в 22:23
Гость Дата: Воскресенье, 26.02.2012, 22:37 | Сообщение № 34
Группа: Гости
второй вариант вроде понял, а первый можно поподробней - как это сделать?
 
Ответить
Сообщениевторой вариант вроде понял, а первый можно поподробней - как это сделать?

Автор - Гость
Дата добавления - 26.02.2012 в 22:37
Hugo Дата: Воскресенье, 26.02.2012, 23:32 | Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Т.к. Ваших чекбоксов не видел - смотрите на мои.
Сделал на строке.
К сообщению приложен файл: 8134440.xls (35.5 Kb)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеТ.к. Ваших чекбоксов не видел - смотрите на мои.
Сделал на строке.

Автор - Hugo
Дата добавления - 26.02.2012 в 23:32
Ed_Vard Дата: Понедельник, 27.02.2012, 02:10 | Сообщение № 36
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (Hugo)
Т.к. Ваших чекбоксов не видел - смотрите на мои.
Сделал на строке.

что то интернет через пень-колоду работает!
Hugo, да - вроде понял - в принципе подходит - только как обратиться к данному модулю - чтобы получить значения? Или весь свой модуль переписывать в модуль формы?
т.е. у меня вот такой код
[vba]
Code
Sub Выборка_по_работодателю()  
Dim VR, x, i&, j As Long, wshList(), bu, z(), per$ ', t()
wshList = Array("1-2010", "2-2010", "1-2011", "2-2011", "3-2011", "4-2011", "1-2012", "2-2012", "3-2012", "4-2012")
VR = "071-011-" & [N1]
With Sheets("Выборка")
.Range("A5:V" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
End With
ReDim z(1 To 100000, 1 To 17)

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1

     For Each bu In wshList
         x = Sheets(bu).Range("A5:Q" & Sheets(bu).Cells(Rows.Count, 1).End(xlUp).Row).Value
         For i = 1 To UBound(x)
             If x(i, 1) = VR Then
             If x(i, 5) = "ИСХ" Then
             If Not .Exists(x(i, 1) & x(i, 12)) Then
                 j = j + 1: .Item(x(i, 1) & x(i, 12)) = j
                     z(j, 1) = x(i, 1)
                     z(j, 2) = Left(x(i, 2), 20)
                     'z(j, 3) = x(i, 3)
                     'z(j, 4) = x(i, 4)
                     z(j, 5) = x(i, 5)
                     z(j, 6) = x(i, 6)
                     z(j, 7) = x(i, 7)
                     z(j, 8) = x(i, 8)
                     z(j, 9) = x(i, 9)
                     z(j, 10) = x(i, 10)
                     z(j, 11) = x(i, 11)
                     z(j, 12) = x(i, 12)
                     z(j, 13) = x(i, 13)
             End If
             End If
             End If
         Next i
     Next bu

End With

With [a5:q5].Resize(j)
     .Value = z
     
End With
End Sub
[/vba]

и мне его надо в код формы засунуть? или можно как то получить значение для wshList из пользовательской формы? из функции представляю как а из формы неврублюсь sad


Сообщение отредактировал Ed_Vard - Понедельник, 27.02.2012, 02:17
 
Ответить
Сообщение
Quote (Hugo)
Т.к. Ваших чекбоксов не видел - смотрите на мои.
Сделал на строке.

что то интернет через пень-колоду работает!
Hugo, да - вроде понял - в принципе подходит - только как обратиться к данному модулю - чтобы получить значения? Или весь свой модуль переписывать в модуль формы?
т.е. у меня вот такой код
[vba]
Code
Sub Выборка_по_работодателю()  
Dim VR, x, i&, j As Long, wshList(), bu, z(), per$ ', t()
wshList = Array("1-2010", "2-2010", "1-2011", "2-2011", "3-2011", "4-2011", "1-2012", "2-2012", "3-2012", "4-2012")
VR = "071-011-" & [N1]
With Sheets("Выборка")
.Range("A5:V" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
End With
ReDim z(1 To 100000, 1 To 17)

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1

     For Each bu In wshList
         x = Sheets(bu).Range("A5:Q" & Sheets(bu).Cells(Rows.Count, 1).End(xlUp).Row).Value
         For i = 1 To UBound(x)
             If x(i, 1) = VR Then
             If x(i, 5) = "ИСХ" Then
             If Not .Exists(x(i, 1) & x(i, 12)) Then
                 j = j + 1: .Item(x(i, 1) & x(i, 12)) = j
                     z(j, 1) = x(i, 1)
                     z(j, 2) = Left(x(i, 2), 20)
                     'z(j, 3) = x(i, 3)
                     'z(j, 4) = x(i, 4)
                     z(j, 5) = x(i, 5)
                     z(j, 6) = x(i, 6)
                     z(j, 7) = x(i, 7)
                     z(j, 8) = x(i, 8)
                     z(j, 9) = x(i, 9)
                     z(j, 10) = x(i, 10)
                     z(j, 11) = x(i, 11)
                     z(j, 12) = x(i, 12)
                     z(j, 13) = x(i, 13)
             End If
             End If
             End If
         Next i
     Next bu

End With

With [a5:q5].Resize(j)
     .Value = z
     
End With
End Sub
[/vba]

и мне его надо в код формы засунуть? или можно как то получить значение для wshList из пользовательской формы? из функции представляю как а из формы неврублюсь sad

Автор - Ed_Vard
Дата добавления - 27.02.2012 в 02:10
Ed_Vard Дата: Понедельник, 27.02.2012, 09:22 | Сообщение № 37
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Вернее я хотел сказать - что у меня несколько разных модулей - но в них есть данная строка и хотелось бы использовать Ваш вариант формирования строки массива. Или придется для каждого модуля делать свою форму?
 
Ответить
СообщениеВернее я хотел сказать - что у меня несколько разных модулей - но в них есть данная строка и хотелось бы использовать Ваш вариант формирования строки массива. Или придется для каждого модуля делать свою форму?

Автор - Ed_Vard
Дата добавления - 27.02.2012 в 09:22
Hugo Дата: Понедельник, 27.02.2012, 10:27 | Сообщение № 38
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
А где Ваши чекбоксы?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеА где Ваши чекбоксы?

Автор - Hugo
Дата добавления - 27.02.2012 в 10:27
Ed_Vard Дата: Понедельник, 27.02.2012, 10:49 | Сообщение № 39
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (Hugo)
А где Ваши чекбоксы?

файл с моими данными имеет размер 22 метра - прицепить не получиться sad
мне просто для примера - как можно получить данные сформированные в Вашем примере для wshList - использовать в одном из моих модулей - который я привел для 3 строки wshList. Т.е. подставить значения полученные в форме для значения в модуле для строки wshList.
 
Ответить
Сообщение
Quote (Hugo)
А где Ваши чекбоксы?

файл с моими данными имеет размер 22 метра - прицепить не получиться sad
мне просто для примера - как можно получить данные сформированные в Вашем примере для wshList - использовать в одном из моих модулей - который я привел для 3 строки wshList. Т.е. подставить значения полученные в форме для значения в модуле для строки wshList.

Автор - Ed_Vard
Дата добавления - 27.02.2012 в 10:49
Hugo Дата: Понедельник, 27.02.2012, 11:00 | Сообщение № 40
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Если чекбоксы на листе - то можно в каждом модуле вызывать макрос (один отдельный), который будет считывать эти чекбоксы и формировать массив нужных названий - можно его сделать публичным или передавать дальше как параметр.
Если чекбоксы на форме - это можно делать нажатием ОК в форме.
Что в общем уже в коде в файле выше почти реализовано, чуть подправьте:

В модуле:

[vba]
Code
Option Explicit
Public wshList

Sub tt()
         UserForm1.Show
End Sub

Sub tttt()
         Dim i&
         For i = 0 To UBound(wshList)
             MsgBox wshList(i)
         Next
End Sub
[/vba]
В форме:

[vba]
Code
Private Sub CommandButton1_Click()
Dim arr, s$, i& ', wshList ' тут объявление убираем
arr = Array("1-2010", "2-2010", "1-2011", "КОРР-ТП")
For i = 0 To UBound(arr)
If Me.Controls("CheckBox" & i + 1) Then s = s & arr(i) & "|"
Next
s = Left(s, Len(s) - 1)
Module1.wshList = Split(s, "|")
End Sub
[/vba]
Вызываете форму, отмечаете чекбоксы, жмёте ОК (ну или можно переделать).
Далее закрыли форму, выполняете tttt второй/другой кнопкой или своим кодом - перебираете сформированный формой массив.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЕсли чекбоксы на листе - то можно в каждом модуле вызывать макрос (один отдельный), который будет считывать эти чекбоксы и формировать массив нужных названий - можно его сделать публичным или передавать дальше как параметр.
Если чекбоксы на форме - это можно делать нажатием ОК в форме.
Что в общем уже в коде в файле выше почти реализовано, чуть подправьте:

В модуле:

[vba]
Code
Option Explicit
Public wshList

Sub tt()
         UserForm1.Show
End Sub

Sub tttt()
         Dim i&
         For i = 0 To UBound(wshList)
             MsgBox wshList(i)
         Next
End Sub
[/vba]
В форме:

[vba]
Code
Private Sub CommandButton1_Click()
Dim arr, s$, i& ', wshList ' тут объявление убираем
arr = Array("1-2010", "2-2010", "1-2011", "КОРР-ТП")
For i = 0 To UBound(arr)
If Me.Controls("CheckBox" & i + 1) Then s = s & arr(i) & "|"
Next
s = Left(s, Len(s) - 1)
Module1.wshList = Split(s, "|")
End Sub
[/vba]
Вызываете форму, отмечаете чекбоксы, жмёте ОК (ну или можно переделать).
Далее закрыли форму, выполняете tttt второй/другой кнопкой или своим кодом - перебираете сформированный формой массив.

Автор - Hugo
Дата добавления - 27.02.2012 в 11:00
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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