Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.10.2008, 17:55   #1
Neo007
Пользователь
 
Регистрация: 09.09.2008
Сообщений: 43
Смех Помогите написать макрос

Друзья, подскажите, в листе to Stores существует некая база данных с номерами магазинов с 8010 по 8023. В книге также созданы одноименные листы с номерами магазинов. Нужен макрос, который бы из листа to Stores копировал информацию со столбца A по столбец K по каждому магазину в лист, относящийся к этому магазину. Выборку можно делать по столбцу B книги to Stores, т.е. именно этот столбец содержит информацию о магазине в формате: Store 8010, Store 8011 ... Store 8023
Вложения
Тип файла: rar TOTAL.rar (17.6 Кб, 11 просмотров)
Neo007 вне форума
Старый 22.10.2008, 06:10   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Запустите макрос "Distribute".
Вложения
Тип файла: rar TOTAL_2.rar (24.1 Кб, 31 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 22.10.2008, 19:10   #3
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Хороший код.
А не напишеть коментарии к коду
Хотелось бы понять принцип работы макроса.
А то я делаю чтото вроде того но у меня на это уходит много времени и код получается в 4 раза длинней а это хороший пример для меня чтобы в будующем писать компактнее.
Rom1k06 вне форума
Старый 23.10.2008, 01:06   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

надеюсь SAS888 не обидится. комментарии будут за строкой кода

Sub Distribution()
Application.ScreenUpdating = False
не обновлять экран
Dim i As Long, j As Long, a As Long, b As Long, ws As Worksheet
Sheets("to stores").Select 'Макрос может запускаться при любом активном листе
выбран лист "to stores" (стал активным)
For i = 9 To Cells(Rows.Count, "B").End(xlUp).Row
цикл начиная с 9-го ряда до конца списка
On Error GoTo Metka 'Если такой лист не существует
Set ws = Sheets(Right(Cells(i, "B"), 4))
забираем 4 правых символа из ячейки В. на этот лист необходимо будет копировать очередной (i-й) ряд данных с листа-источника
a = ws.Cells(Rows.Count, "A").End(xlUp).Row
определяем последний ряд по колонке А на листе-приемнике
b = ws.Cells(Rows.Count, "B").End(xlUp).Row
определяем последний ряд по колонке В (на всякий случай)
j = IIf(a > b, a + 1, b + 1)
опредеем ряд куда копировать данные по большему из А или В, + 1
Rows(i).Copy ws.Rows(j)
копируем ряд
Metka: Next
End Sub

Код действительно очень компактный.
На мой взгляд, сомнительна необходимость строки с запретом обновления экрана. Потому как открыт у нас постоянно лист "to stores", а данные заносятся на закрытые листы, могу предположить, что эксель ничего не обновляет в данной ситуации (это предположение). Ну, и после Next, видимо, необходимо было снова включить обновление экрана.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 24.10.2008, 07:25   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Спасибо IgorGO. Комментарии подробнейшие.
По поводу Application.ScreenUpdating:
1. Согласен, в данном случае это излишне (вставил на автомате).
2. По завершении работы макроса Application.ScreenUpdating возвращается в состояние True автоматически.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать макрос для Word. Hoomer Фриланс 2 24.09.2008 12:19
Помогите написать макрос выбора по дате/времени и сортировке по нужным параметрам rf_dru Microsoft Office Excel 39 04.07.2008 12:36
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04
Помогите написать прогу!Среди заданных целых чисел k, l, m найти пары кратных.Написать по проще чемЭесть vdv08 Паскаль, Turbo Pascal, PascalABC.NET 4 04.04.2008 16:56
помогите, пожалуйсто, написать макрос для excel bacalavr Microsoft Office Excel 2 04.04.2008 11:39