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

Вход

Регистрация

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

 

= Мир MS Excel/Ускорение работы макроса - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорение работы макроса (Макросы/Sub)
Ускорение работы макроса
ZamoK Дата: Вторник, 21.07.2015, 15:56 | Сообщение № 21
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Добавлю пример без рекурсии

Тут что-то пошло не так!
К сообщению приложен файл: Obraz_m.xlsm (97.2 Kb)


Я не Гуру, но стремлюсь!
 
Ответить
Сообщение
Добавлю пример без рекурсии

Тут что-то пошло не так!

Автор - ZamoK
Дата добавления - 21.07.2015 в 15:56
miver Дата: Вторник, 21.07.2015, 16:07 | Сообщение № 22
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Забыл второй индекс добавить. Нужно так
[vba]
Код
MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИЕ": Exit Sub
[/vba]
 
Ответить
СообщениеЗабыл второй индекс добавить. Нужно так
[vba]
Код
MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИЕ": Exit Sub
[/vba]

Автор - miver
Дата добавления - 21.07.2015 в 16:07
ZamoK Дата: Вторник, 21.07.2015, 16:20 | Сообщение № 23
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Да именно так, только работа макроса должна продолжаться до пустой ячейки, а сообщение только для информации


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеДа именно так, только работа макроса должна продолжаться до пустой ячейки, а сообщение только для информации

Автор - ZamoK
Дата добавления - 21.07.2015 в 16:20
ZamoK Дата: Вторник, 21.07.2015, 16:33 | Сообщение № 24
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
4.1) Если номера на листе "Состав узлов" в столбце А нет, то выдаём сообщение ... при нажатии ОК продолжаем 2,3,4

УПС Я поправил немного, этот пункт я пропустил %)


Я не Гуру, но стремлюсь!
 
Ответить
Сообщение
4.1) Если номера на листе "Состав узлов" в столбце А нет, то выдаём сообщение ... при нажатии ОК продолжаем 2,3,4

УПС Я поправил немного, этот пункт я пропустил %)

Автор - ZamoK
Дата добавления - 21.07.2015 в 16:33
miver Дата: Вторник, 21.07.2015, 16:37 | Сообщение № 25
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Если с узлом ничего не нужно делать, то просто удалите выход из процедуры (Exit Sub)
и добавте перебор на следующий список
[vba]
Код
MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИЕ": p = p - 1
[/vba]
А лучше добавить эту информацию в результат. Замените предыдущую строку на вот это
[vba]
Код
              If d.Exists(st(p, 0)) Then
                   tmp = d(st(p, 0))
                   tmp(3) = tmp(3) + k
                   d(st(p, 0)) = tmp
               Else
                   ReDim tmp(1 To 3)
                   tmp(1) = st(p, 0)
                   tmp(2) = "!!!Не разузлован"
                   tmp(3) = k
                   d.Add st(p, 0), tmp
               End If
             p = p - 1
[/vba]
В результате будет так


Сообщение отредактировал miver - Среда, 22.07.2015, 08:18
 
Ответить
СообщениеЕсли с узлом ничего не нужно делать, то просто удалите выход из процедуры (Exit Sub)
и добавте перебор на следующий список
[vba]
Код
MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИЕ": p = p - 1
[/vba]
А лучше добавить эту информацию в результат. Замените предыдущую строку на вот это
[vba]
Код
              If d.Exists(st(p, 0)) Then
                   tmp = d(st(p, 0))
                   tmp(3) = tmp(3) + k
                   d(st(p, 0)) = tmp
               Else
                   ReDim tmp(1 To 3)
                   tmp(1) = st(p, 0)
                   tmp(2) = "!!!Не разузлован"
                   tmp(3) = k
                   d.Add st(p, 0), tmp
               End If
             p = p - 1
[/vba]
В результате будет так

Автор - miver
Дата добавления - 21.07.2015 в 16:37
miver Дата: Среда, 22.07.2015, 08:19 | Сообщение № 26
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
ZamoK, Если что - подправил порядок действий в коде выше.
 
Ответить
СообщениеZamoK, Если что - подправил порядок действий в коде выше.

Автор - miver
Дата добавления - 22.07.2015 в 08:19
ZamoK Дата: Среда, 22.07.2015, 15:47 | Сообщение № 27
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
miver, дело в том, что номер из ячейки В3 и последующие с листа "Перечень", а также номера разузловываемых узлов не должены попадать в список на лист "Итог", иначе кол-во узлов удваивается, утраивается и т.д. а в остальном очень даже достойный вариант, по крайней мере можно работать даже без карандаша :D


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Среда, 22.07.2015, 16:03
 
Ответить
Сообщениеmiver, дело в том, что номер из ячейки В3 и последующие с листа "Перечень", а также номера разузловываемых узлов не должены попадать в список на лист "Итог", иначе кол-во узлов удваивается, утраивается и т.д. а в остальном очень даже достойный вариант, по крайней мере можно работать даже без карандаша :D

Автор - ZamoK
Дата добавления - 22.07.2015 в 15:47
miver Дата: Среда, 22.07.2015, 17:09 | Сообщение № 28
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Так чтоли?
К сообщению приложен файл: 6533715.xlsm (97.5 Kb)
 
Ответить
СообщениеТак чтоли?

Автор - miver
Дата добавления - 22.07.2015 в 17:09
ZamoK Дата: Четверг, 23.07.2015, 12:53 | Сообщение № 29
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
нет не так


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Четверг, 23.07.2015, 12:58
 
Ответить
Сообщениенет не так

Автор - ZamoK
Дата добавления - 23.07.2015 в 12:53
miver Дата: Четверг, 23.07.2015, 17:50 | Сообщение № 30
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Сделал как прописал
С примером из первого поста совпадает
К сообщению приложен файл: 1132986.xlsm (95.0 Kb)
 
Ответить
СообщениеСделал как прописал
С примером из первого поста совпадает

Автор - miver
Дата добавления - 23.07.2015 в 17:50
ZamoK Дата: Пятница, 24.07.2015, 13:16 | Сообщение № 31
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
miver, Ну да теперь все совпадает :D . только вот[vba]
Код
Else
                       ReDim tmp(1 To 3)
                       tmp(1) = st(p, 0)
                       tmp(2) = "!!!Не разузлован"
                       tmp(3) = k
                       d.Add st(p, 0), tmp
[/vba]
зачем это в коде если не работает? А хотелось бы чтоб работало.
Да и ещё возьмите последний узел с листа состав узлов и попробуйте его заполнить. Ошибочка тут:s = Trim(struct(i, 3)) [vba]
Код
End If
                   i = i + 1
                s = Trim(struct(i, 3))
               Wend
           Else
               MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИ
[/vba] если через пустую строчку вниз заполниить ячейки, то работает


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Пятница, 24.07.2015, 13:18
 
Ответить
Сообщениеmiver, Ну да теперь все совпадает :D . только вот[vba]
Код
Else
                       ReDim tmp(1 To 3)
                       tmp(1) = st(p, 0)
                       tmp(2) = "!!!Не разузлован"
                       tmp(3) = k
                       d.Add st(p, 0), tmp
[/vba]
зачем это в коде если не работает? А хотелось бы чтоб работало.
Да и ещё возьмите последний узел с листа состав узлов и попробуйте его заполнить. Ошибочка тут:s = Trim(struct(i, 3)) [vba]
Код
End If
                   i = i + 1
                s = Trim(struct(i, 3))
               Wend
           Else
               MsgBox "Не разузлован: " & st(p, 0), 48, "ВНИМАНИ
[/vba] если через пустую строчку вниз заполниить ячейки, то работает

Автор - ZamoK
Дата добавления - 24.07.2015 в 13:16
miver Дата: Пятница, 24.07.2015, 17:16 | Сообщение № 32
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
только вот
Поправил

Ошибочка тут:s = Trim(struct(i, 3))
На самом деле это неучтеный пробел после таблицы тут
[vba]
Код
struct = Лист5.Range("A3", "E" & Лист5.Range("C60000").End(xlUp).Row + 1).Value
[/vba]
К сообщению приложен файл: 2758836.xlsm (47.5 Kb)
 
Ответить
Сообщение
только вот
Поправил

Ошибочка тут:s = Trim(struct(i, 3))
На самом деле это неучтеный пробел после таблицы тут
[vba]
Код
struct = Лист5.Range("A3", "E" & Лист5.Range("C60000").End(xlUp).Row + 1).Value
[/vba]

Автор - miver
Дата добавления - 24.07.2015 в 17:16
ZamoK Дата: Понедельник, 27.07.2015, 12:37 | Сообщение № 33
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
miver, если кол-во дробное, то не считает!
К сообщению приложен файл: 222.xlsm (45.5 Kb)


Я не Гуру, но стремлюсь!
 
Ответить
Сообщениеmiver, если кол-во дробное, то не считает!

Автор - ZamoK
Дата добавления - 27.07.2015 в 12:37
SLAVICK Дата: Понедельник, 27.07.2015, 13:12 | Сообщение № 34
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
off_top
ZamoK, ради любопытства - а чем файл с моего последнего поста не устроил?


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 27.07.2015, 13:12
 
Ответить
Сообщениеoff_top
ZamoK, ради любопытства - а чем файл с моего последнего поста не устроил?

Автор - SLAVICK
Дата добавления - 27.07.2015 в 13:12
ZamoK Дата: Понедельник, 27.07.2015, 13:44 | Сообщение № 35
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
SLAVICK, Никаких вопросов файл полностью устраивает, все отлично. Вот miver, просто хочет предложить решение немного другим спосом (без рекурсии)
Добавлю пример без рекурсии

Я правда не знаю, что такое рекурсия, но бросить на пол пути тему которую создал - как-то не правильно! Может решение таким способом комуто будет более приемлимо, ведь данные могут быть разными, и я не единственный в мире кто выполняет такого рода работу :)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеSLAVICK, Никаких вопросов файл полностью устраивает, все отлично. Вот miver, просто хочет предложить решение немного другим спосом (без рекурсии)
Добавлю пример без рекурсии

Я правда не знаю, что такое рекурсия, но бросить на пол пути тему которую создал - как-то не правильно! Может решение таким способом комуто будет более приемлимо, ведь данные могут быть разными, и я не единственный в мире кто выполняет такого рода работу :)

Автор - ZamoK
Дата добавления - 27.07.2015 в 13:44
miver Дата: Вторник, 28.07.2015, 09:48 | Сообщение № 36
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
если кол-во дробное

Просто удалите все функции Val. Она переводит число и текст в целое число.
 
Ответить
Сообщение
если кол-во дробное

Просто удалите все функции Val. Она переводит число и текст в целое число.

Автор - miver
Дата добавления - 28.07.2015 в 09:48
ZamoK Дата: Вторник, 28.07.2015, 13:54 | Сообщение № 37
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
все функции Val.
Стоп стоп это вы сейчас с кем разговариваете? :D


Я не Гуру, но стремлюсь!
 
Ответить
Сообщение
все функции Val.
Стоп стоп это вы сейчас с кем разговариваете? :D

Автор - ZamoK
Дата добавления - 28.07.2015 в 13:54
miver Дата: Среда, 29.07.2015, 09:55 | Сообщение № 38
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
ZamoK, Если Вас все устраивает, то зачем работаете над вторым вариантом ? Или просто делать нечего ?
Я правда не знаю, что такое рекурсия
Для общего развития ознакомьтесь Wiki - рекурсия особенно уделите внимание разделу "в программировании"
Для определения более быстрого метода нужно протестировать при необходимости перебора порядка 10000 записей. Тогда и узнаете, какой лучше.

Стоп стоп это вы сейчас с кем разговариваете?
Хм... Почему-то сложилось впечатление, что Вы сами сможете догадаться. Видно не судьба :)
 
Ответить
СообщениеZamoK, Если Вас все устраивает, то зачем работаете над вторым вариантом ? Или просто делать нечего ?
Я правда не знаю, что такое рекурсия
Для общего развития ознакомьтесь Wiki - рекурсия особенно уделите внимание разделу "в программировании"
Для определения более быстрого метода нужно протестировать при необходимости перебора порядка 10000 записей. Тогда и узнаете, какой лучше.

Стоп стоп это вы сейчас с кем разговариваете?
Хм... Почему-то сложилось впечатление, что Вы сами сможете догадаться. Видно не судьба :)

Автор - miver
Дата добавления - 29.07.2015 в 09:55
miver Дата: Среда, 29.07.2015, 09:55 | Сообщение № 39
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
 
Ответить
Сообщение

Автор - miver
Дата добавления - 29.07.2015 в 09:55
ZamoK Дата: Среда, 29.07.2015, 15:06 | Сообщение № 40
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
miver, СПС все работает как часы!


Я не Гуру, но стремлюсь!
 
Ответить
Сообщениеmiver, СПС все работает как часы!

Автор - ZamoK
Дата добавления - 29.07.2015 в 15:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорение работы макроса (Макросы/Sub)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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