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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос цикла в строки по условию - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос цикла в строки по условию
pechkin Дата: Среда, 26.02.2014, 20:46 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 332
Репутация: 49 ±
Замечаний: 0% ±

2003
Здравствуйте! Более чем во многом благодаря данному сайту, получился Макрос, который извлекает данные по заданному условию из Листа, используя цикл. Как его изменить, чтобы полученные данные вставлялись на другой Лист не подряд, а в нужную строку (по совпадению номера) Подробнее в примере.
Спасибо!
К сообщению приложен файл: 5798369.rar (62.4 Kb)
 
Ответить
СообщениеЗдравствуйте! Более чем во многом благодаря данному сайту, получился Макрос, который извлекает данные по заданному условию из Листа, используя цикл. Как его изменить, чтобы полученные данные вставлялись на другой Лист не подряд, а в нужную строку (по совпадению номера) Подробнее в примере.
Спасибо!

Автор - pechkin
Дата добавления - 26.02.2014 в 20:46
AlexM Дата: Среда, 26.02.2014, 22:05 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1130 ±
Замечаний: 0% ±

Excel 2003
Так?
К сообщению приложен файл: ___new.rar (62.1 Kb)



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

Автор - AlexM
Дата добавления - 26.02.2014 в 22:05
pechkin Дата: Четверг, 27.02.2014, 19:47 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 332
Репутация: 49 ±
Замечаний: 0% ±

2003
Спасибо! Думал , что все просто-увы... Посмотрите еще раз, может не совсем понятно объяснил задачу Макрос отлично работает если цифры в столбце А идут попорядку, а нужно именно сравнение двух столбцов по этим числам. Спасибо!
К сообщению приложен файл: _new1.rar (62.4 Kb)
 
Ответить
СообщениеСпасибо! Думал , что все просто-увы... Посмотрите еще раз, может не совсем понятно объяснил задачу Макрос отлично работает если цифры в столбце А идут попорядку, а нужно именно сравнение двух столбцов по этим числам. Спасибо!

Автор - pechkin
Дата добавления - 27.02.2014 в 19:47
AlexM Дата: Четверг, 27.02.2014, 19:55 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1130 ±
Замечаний: 0% ±

Excel 2003
Макрос отлично работает если цифры в столбце А идут попорядку
Может быть отсортировать их перед запуском макроса?



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Макрос отлично работает если цифры в столбце А идут попорядку
Может быть отсортировать их перед запуском макроса?

Автор - AlexM
Дата добавления - 27.02.2014 в 19:55
pechkin Дата: Четверг, 27.02.2014, 21:22 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 332
Репутация: 49 ±
Замечаний: 0% ±

2003
Уважаемый, AlexM! Еще раз благодарю за участие. Макрос с Вашим дополнением уже практически решил задачу. Сортировка перед запуском не вариант. Хотелось бы что-то типа функции Если, но по двум условиям, т.е при совпадении двух указанных критериев выбранная Макросом строка вставляется в указанное условием место на Листе. Пытался сам что-то изобразить но ...
 
Ответить
СообщениеУважаемый, AlexM! Еще раз благодарю за участие. Макрос с Вашим дополнением уже практически решил задачу. Сортировка перед запуском не вариант. Хотелось бы что-то типа функции Если, но по двум условиям, т.е при совпадении двух указанных критериев выбранная Макросом строка вставляется в указанное условием место на Листе. Пытался сам что-то изобразить но ...

Автор - pechkin
Дата добавления - 27.02.2014 в 21:22
Hugo Дата: Четверг, 27.02.2014, 23:28 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
Нужно сперва в словаре запомнить координаты данных в архиве по номеру и месяцу, затем по этим координатам их разложить по местам в листе Месячный.
Быстрее через массив, но если данных как в примере немного, то можно без массива. Да и даже без словаря - но с словарём код короче.

[vba]
Код
Sub tt()
       Dim a(), b(), i&, t$, d$, x&

       With CreateObject("scripting.dictionary"): .comparemode = 1
           a = Sheets("АРХИВ").UsedRange.Value
           For i = 1 To UBound(a): .Item(a(i, 1) & "|" & a(i, 3)) = i: Next
           b = Sheets("Месячный").UsedRange.Offset(1).Value
           d = [c1]
           For i = 1 To UBound(b)
               t = b(i, 1) & "|" & d
               If .exists(t) Then
                   x = .Item(t)
                   b(i, 2) = a(x, 1)
                   b(i, 3) = a(x, 2)
                   b(i, 4) = a(x, 13)
                   b(i, 5) = a(x, 19)
                   b(i, 6) = a(x, 25)
               End If
           Next
       End With
       Sheets("Месячный").UsedRange.Offset(1).Value = b
End Sub
[/vba]
P.S. Вообще есть в коде одна помарка - массив b нужно в начале иметь пустой. Т.е. определить необходимый размер и создать массив под размер, который и заполнить.
Потому что иначе для тех, кого нет в выбранном месяце - останутся старые данные!
Или же "бюджетный вариант": если t нет в словаре - очищаем текущую строку массива b.
К сообщению приложен файл: _new2.rar (65.4 Kb)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНужно сперва в словаре запомнить координаты данных в архиве по номеру и месяцу, затем по этим координатам их разложить по местам в листе Месячный.
Быстрее через массив, но если данных как в примере немного, то можно без массива. Да и даже без словаря - но с словарём код короче.

[vba]
Код
Sub tt()
       Dim a(), b(), i&, t$, d$, x&

       With CreateObject("scripting.dictionary"): .comparemode = 1
           a = Sheets("АРХИВ").UsedRange.Value
           For i = 1 To UBound(a): .Item(a(i, 1) & "|" & a(i, 3)) = i: Next
           b = Sheets("Месячный").UsedRange.Offset(1).Value
           d = [c1]
           For i = 1 To UBound(b)
               t = b(i, 1) & "|" & d
               If .exists(t) Then
                   x = .Item(t)
                   b(i, 2) = a(x, 1)
                   b(i, 3) = a(x, 2)
                   b(i, 4) = a(x, 13)
                   b(i, 5) = a(x, 19)
                   b(i, 6) = a(x, 25)
               End If
           Next
       End With
       Sheets("Месячный").UsedRange.Offset(1).Value = b
End Sub
[/vba]
P.S. Вообще есть в коде одна помарка - массив b нужно в начале иметь пустой. Т.е. определить необходимый размер и создать массив под размер, который и заполнить.
Потому что иначе для тех, кого нет в выбранном месяце - останутся старые данные!
Или же "бюджетный вариант": если t нет в словаре - очищаем текущую строку массива b.

Автор - Hugo
Дата добавления - 27.02.2014 в 23:28
pechkin Дата: Воскресенье, 02.03.2014, 19:02 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 332
Репутация: 49 ±
Замечаний: 0% ±

2003
Еще раз благодарность Hugo! Ваш код работает достаточно быстро,хотя таблица состоит на сегодня порядка 600 строк и 40 столбцов и будет кол-во строк увеличиваться. Один вопрос что значит в коде знак "|" ?
Спасибо!
 
Ответить
СообщениеЕще раз благодарность Hugo! Ваш код работает достаточно быстро,хотя таблица состоит на сегодня порядка 600 строк и 40 столбцов и будет кол-во строк увеличиваться. Один вопрос что значит в коде знак "|" ?
Спасибо!

Автор - pechkin
Дата добавления - 02.03.2014 в 19:02
Alex_ST Дата: Воскресенье, 02.03.2014, 20:53 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация: 622 ±
Замечаний: 0% ±

2003
Ничего такого особенного это не значит.
Просто Игорь выбрал этот символ как признак места "склейки" двух значений.
В принципе это мог быть любой символ, даже вообще ничего.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНичего такого особенного это не значит.
Просто Игорь выбрал этот символ как признак места "склейки" двух значений.
В принципе это мог быть любой символ, даже вообще ничего.

Автор - Alex_ST
Дата добавления - 02.03.2014 в 20:53
Hugo Дата: Воскресенье, 02.03.2014, 21:17 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
Это я выбрал как редко встречающийся в данных символ, да и визуально хорошо выглядит :)
Вообще в 99% случаев можно склеивать вообще без разделителя, но в 1% есть риск попасть на данные 12 345 и 123 45, а этого нам не нужно :)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЭто я выбрал как редко встречающийся в данных символ, да и визуально хорошо выглядит :)
Вообще в 99% случаев можно склеивать вообще без разделителя, но в 1% есть риск попасть на данные 12 345 и 123 45, а этого нам не нужно :)

Автор - Hugo
Дата добавления - 02.03.2014 в 21:17
  • Страница 1 из 1
  • 1
Поиск:

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