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

Вход

Регистрация

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

 

= Мир MS Excel/Подсчет совпадений в ячейках - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет совпадений в ячейках (Макросы/Sub)
Подсчет совпадений в ячейках
Sashagor1982 Дата: Понедельник, 18.05.2015, 21:43 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте уважаемые форумчане. Вопрос состоит в следующем, в файле примере имеется исходный лист "МИРВОЙНА" и лист результатов "ППСС". МИРВОЙНА содержит название должностей их коды и названия подразделений, а также убытие и прибытие сотрудников при перемещении. В ППСС содержится пример результата такого плана. Мой вопрос состоит в том, как получить указанный результат БЕЗ ИСПОЛЬЗОВАНИЯ ЦИКЛОВ и СРАВНЕНИЙ, так как с циклами программа работает очень долго... Заранее спасибо.
К сообщению приложен файл: 6024008.xls (99.0 Kb)
 
Ответить
СообщениеЗдравствуйте уважаемые форумчане. Вопрос состоит в следующем, в файле примере имеется исходный лист "МИРВОЙНА" и лист результатов "ППСС". МИРВОЙНА содержит название должностей их коды и названия подразделений, а также убытие и прибытие сотрудников при перемещении. В ППСС содержится пример результата такого плана. Мой вопрос состоит в том, как получить указанный результат БЕЗ ИСПОЛЬЗОВАНИЯ ЦИКЛОВ и СРАВНЕНИЙ, так как с циклами программа работает очень долго... Заранее спасибо.

Автор - Sashagor1982
Дата добавления - 18.05.2015 в 21:43
Skif-F Дата: Понедельник, 18.05.2015, 22:11 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Для начала попробуйте так:
[vba]
Код

Sub План_перемещения()
     Application.ScreenUpdating = False
     ВнешнийВид
     Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
СообщениеДля начала попробуйте так:
[vba]
Код

Sub План_перемещения()
     Application.ScreenUpdating = False
     ВнешнийВид
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Skif-F
Дата добавления - 18.05.2015 в 22:11
Sashagor1982 Дата: Понедельник, 18.05.2015, 22:57 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Спс, но это не решение проблемы.
 
Ответить
СообщениеСпс, но это не решение проблемы.

Автор - Sashagor1982
Дата добавления - 18.05.2015 в 22:57
Skif-F Дата: Понедельник, 18.05.2015, 23:23 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Первоначальный результат. Проверяйте. Доработки завтра
К сообщению приложен файл: _6024008.xls (93.5 Kb)


Сообщение отредактировал Skif-F - Вторник, 19.05.2015, 00:44
 
Ответить
СообщениеПервоначальный результат. Проверяйте. Доработки завтра

Автор - Skif-F
Дата добавления - 18.05.2015 в 23:23
Sashagor1982 Дата: Вторник, 19.05.2015, 02:48 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Не плохо, только не заполняется количество. И если одинаково, как в примере "номер расчета", то дублировать не надо. И конечно, же хотелось бы без циклов, с коллекциями например, хотя я не особый спец.
 
Ответить
СообщениеНе плохо, только не заполняется количество. И если одинаково, как в примере "номер расчета", то дублировать не надо. И конечно, же хотелось бы без циклов, с коллекциями например, хотя я не особый спец.

Автор - Sashagor1982
Дата добавления - 19.05.2015 в 02:48
Sashagor1982 Дата: Вторник, 19.05.2015, 11:18 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Не понятна строка [vba]
Код
Dim Словарь As New Dictionary
[/vba] На ней работа останавливается и выдается ошибка User-defined type not defined/
 
Ответить
СообщениеНе понятна строка [vba]
Код
Dim Словарь As New Dictionary
[/vba] На ней работа останавливается и выдается ошибка User-defined type not defined/

Автор - Sashagor1982
Дата добавления - 19.05.2015 в 11:18
SLAVICK Дата: Вторник, 19.05.2015, 11:25 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
попробуйте вместо:
[vba]
Код
Dim Словарь As New Dictionary       'Словарь для ускорения работы
[/vba]
Написать
[vba]
Код
Dim Словарь As Object
Set Словарь = CreateObject("Scripting.Dictionary")
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениепопробуйте вместо:
[vba]
Код
Dim Словарь As New Dictionary       'Словарь для ускорения работы
[/vba]
Написать
[vba]
Код
Dim Словарь As Object
Set Словарь = CreateObject("Scripting.Dictionary")
[/vba]

Автор - SLAVICK
Дата добавления - 19.05.2015 в 11:25
KSV Дата: Вторник, 19.05.2015, 11:30 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Эта ошибка появляется потому, что у вас не подключена библиотека Scripting.

во вложенном файле готовое решение вашей задачи (кнопка "Заполнить ППСС - KSV")
К сообщению приложен файл: _6024008.zip (41.9 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеЭта ошибка появляется потому, что у вас не подключена библиотека Scripting.

во вложенном файле готовое решение вашей задачи (кнопка "Заполнить ППСС - KSV")

Автор - KSV
Дата добавления - 19.05.2015 в 11:30
KSV Дата: Вторник, 19.05.2015, 11:59 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Skif-F, видно, что вы неплохо знаете VBA, но в вашем коде есть несколько мест, на которые стоит обратить внимание... (я их прокомментировал, в вашем модуле - см. вложенный файл из моего предыдущего поста)

Sashagor1982, в моем решении, для проверки на уникальность, используются аж 4 поля (в точности, как было описано у вас - "кол-во одинаковых перемещений, т.е. должность убытия и прибытия , наименование подразделенияодинаковы для нескольких перемещений"). Это точно не избыточно? Т.е., у вас могут быть ситуации, например, когда будут совпадать все условия, кроме одного? Мне, все-таки, кажется, что это избыточные условия и если вы просчитаете все возможные варианты, эти проверки можно упростить... (но не навязываю! просто, советую, а решать вам. хотя если вас устраивает скорость выполнения, то можно забить на оптимизацию :) )
Мой код - весь в отдельном модуле, но в вашем модуле я поправил функцию WorksheetIsExist() - просто, нет смысла сравнивать в цикле имена всех листов книги, если задача решается в один ход.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Вторник, 19.05.2015, 12:01
 
Ответить
СообщениеSkif-F, видно, что вы неплохо знаете VBA, но в вашем коде есть несколько мест, на которые стоит обратить внимание... (я их прокомментировал, в вашем модуле - см. вложенный файл из моего предыдущего поста)

Sashagor1982, в моем решении, для проверки на уникальность, используются аж 4 поля (в точности, как было описано у вас - "кол-во одинаковых перемещений, т.е. должность убытия и прибытия , наименование подразделенияодинаковы для нескольких перемещений"). Это точно не избыточно? Т.е., у вас могут быть ситуации, например, когда будут совпадать все условия, кроме одного? Мне, все-таки, кажется, что это избыточные условия и если вы просчитаете все возможные варианты, эти проверки можно упростить... (но не навязываю! просто, советую, а решать вам. хотя если вас устраивает скорость выполнения, то можно забить на оптимизацию :) )
Мой код - весь в отдельном модуле, но в вашем модуле я поправил функцию WorksheetIsExist() - просто, нет смысла сравнивать в цикле имена всех листов книги, если задача решается в один ход.

Автор - KSV
Дата добавления - 19.05.2015 в 11:59
Skif-F Дата: Вторник, 19.05.2015, 12:29 | Сообщение № 10
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
...но в вашем коде есть несколько мест...

То что в файле-примере 48 строк, не означает, что их и в итоговом файле столько же. Меня скорее ругать за строку[vba]
Код
Worksheets("МИРВОЙНА").Range("A1:W50").Value
[/vba]чем за то, что я заложил "запас прочности" в других местах программы.

[vba]
Код
'можно не обнулять - здесь j и так = 0
        j = 0   'Счётчик результата
[/vba]- защита от "дурака" (в том числе и от себя) и стиль оформления программы - иногда спасает

[vba]
Код
'сразу объявив массив ВЛист нужного размера, можно было обойтись и без доп. массива Рез(),
'и заполнять здесь сразу массив ВЛист
[/vba]- "запас прочности". VBA позволяет расширять массив "по столбцам", а нам надо "по строкам"

[vba]
Код
    'Контроль отсутствия листа
        If Not WorksheetIsExist("ППСС") Then
            План_перемещения.План_перемещения
        End If
[/vba]- я не хочу повторно заполнять и форматировать уже существующий лист.

Это если вкратце.


Сообщение отредактировал Skif-F - Вторник, 19.05.2015, 12:30
 
Ответить
Сообщение
...но в вашем коде есть несколько мест...

То что в файле-примере 48 строк, не означает, что их и в итоговом файле столько же. Меня скорее ругать за строку[vba]
Код
Worksheets("МИРВОЙНА").Range("A1:W50").Value
[/vba]чем за то, что я заложил "запас прочности" в других местах программы.

[vba]
Код
'можно не обнулять - здесь j и так = 0
        j = 0   'Счётчик результата
[/vba]- защита от "дурака" (в том числе и от себя) и стиль оформления программы - иногда спасает

[vba]
Код
'сразу объявив массив ВЛист нужного размера, можно было обойтись и без доп. массива Рез(),
'и заполнять здесь сразу массив ВЛист
[/vba]- "запас прочности". VBA позволяет расширять массив "по столбцам", а нам надо "по строкам"

[vba]
Код
    'Контроль отсутствия листа
        If Not WorksheetIsExist("ППСС") Then
            План_перемещения.План_перемещения
        End If
[/vba]- я не хочу повторно заполнять и форматировать уже существующий лист.

Это если вкратце.

Автор - Skif-F
Дата добавления - 19.05.2015 в 12:29
KSV Дата: Вторник, 19.05.2015, 13:20 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
[offtop]Зачем закладывать "запас прочности", если он останется невостребованным? Зачем вообще "запас прочности", если кол-во необходимых строк в результ. массиве известно (можно узнать) сразу? Я не собирался вас "ругать" и прошу прощения, если мои комментарии вас обидели. Я лишь пытался показать вам "узкие места" (которые можно легко оптимизировать) в вашем коде. А вы, хотите - прислушивайтесь, не хотите - пишите по-своему, это ваше решение...

VBA позволяет расширять массив "по столбцам", а нам надо "по строкам"

По какой причине вы использовали доп. массив Рез - я понимаю... Я просто пытался вам объяснить, что можно было легко обойтись одним результ. массивом и не перезаписываться из одного массива в другой. Если объяснить не получилось, то можете посмотреть пример в моем модуле, в том же файле. А если вам это не интересно, то просто забейте...

[p.s.]Я не хочу с вами спорить и утверждать, что мое мнение "правильнее" вашего. Я просто дал вам советы по оптимизации вашего кода, а принимать их или нет - это ваше дело. Оправдываться передо мной за те или иные решения в вашем коде тоже не нужно - я вам не судья и не экзаменатор. Дискуссию продолжать тоже не имеет смысла, тем более в этой теме.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение[offtop]Зачем закладывать "запас прочности", если он останется невостребованным? Зачем вообще "запас прочности", если кол-во необходимых строк в результ. массиве известно (можно узнать) сразу? Я не собирался вас "ругать" и прошу прощения, если мои комментарии вас обидели. Я лишь пытался показать вам "узкие места" (которые можно легко оптимизировать) в вашем коде. А вы, хотите - прислушивайтесь, не хотите - пишите по-своему, это ваше решение...

VBA позволяет расширять массив "по столбцам", а нам надо "по строкам"

По какой причине вы использовали доп. массив Рез - я понимаю... Я просто пытался вам объяснить, что можно было легко обойтись одним результ. массивом и не перезаписываться из одного массива в другой. Если объяснить не получилось, то можете посмотреть пример в моем модуле, в том же файле. А если вам это не интересно, то просто забейте...

[p.s.]Я не хочу с вами спорить и утверждать, что мое мнение "правильнее" вашего. Я просто дал вам советы по оптимизации вашего кода, а принимать их или нет - это ваше дело. Оправдываться передо мной за те или иные решения в вашем коде тоже не нужно - я вам не судья и не экзаменатор. Дискуссию продолжать тоже не имеет смысла, тем более в этой теме.

Автор - KSV
Дата добавления - 19.05.2015 в 13:20
Sashagor1982 Дата: Вторник, 19.05.2015, 13:41 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
KSV, Я не понял несколько моментов
[vba]
Код
' Загоняем в словарь только нужное, а не все подряд
             For Each c In .Columns(2).SpecialCells(xlCellTypeFormulas)
                 Dict.Add c.Value, c.Row
             Next
[/vba] Данные берутся со столбца "убывает"? И еще, если перед помещение в лист результат надо не просто вставлять значения, а проводить какие либо операции, например ВУС делить по три цифры и заполнять 3,4 и 10,11 столбцы листа-результата или проводить сравнение, например если в листе МИРВОЙНА столбец I содержит значение НЕТ, то данное перемещение не рассматривать, подскажите в каком месте изменить код? Заранее Спасибо
 
Ответить
СообщениеKSV, Я не понял несколько моментов
[vba]
Код
' Загоняем в словарь только нужное, а не все подряд
             For Each c In .Columns(2).SpecialCells(xlCellTypeFormulas)
                 Dict.Add c.Value, c.Row
             Next
[/vba] Данные берутся со столбца "убывает"? И еще, если перед помещение в лист результат надо не просто вставлять значения, а проводить какие либо операции, например ВУС делить по три цифры и заполнять 3,4 и 10,11 столбцы листа-результата или проводить сравнение, например если в листе МИРВОЙНА столбец I содержит значение НЕТ, то данное перемещение не рассматривать, подскажите в каком месте изменить код? Заранее Спасибо

Автор - Sashagor1982
Дата добавления - 19.05.2015 в 13:41
KSV Дата: Вторник, 19.05.2015, 15:35 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Данные берутся со столбца "убывает"?

Этот цикл проходит по непустым ячейкам в столбце W. Если говорить о файле-примере, то это будет всего 4 итерации. И при этом, в словарь мы занесем тоже всего 4 значения (номера строк для упр.5, УСАДН3 и т.д), которые нам понадобятся в след. цикле.
След. цикл - тоже всего 4 итерации, по непустым ячейкам в столбце V. При этом, на каждом шаге этого (второго) цикла, без каких-либо проверок, мы уже имеем полную информацию по убытии и прибытии одного из 4-х перемещений, поэтому на каждой итерации мы заполняем полностью всю "строчку" результ. массива, кроме кол-ва. (каждая "строчка" результ. массива соответствует одной строке таблицы на листе "ППСС", т.е., за эти 4 итерации мы заполняем всю таблицу). А 2 последние строки второго цикла, подготавливают данные для подсчета кол-ва, задавая уникальность ключа, по указанным вами условиям, и если ключ повторяется, то в словарь не добавляется новая запись, а инкрементируется значение по этому ключу. Таким образом, после выхода из этого второго цикла у нас уже есть ВСЕ данные для заполнения таблицы, и все они, кроме кол-ва, уже записаны в результ. массив, и в нужные ячейки. А данные по кол-ву тоже уже готовы, но только лежат во втором словаре. И след. циклом "For i = 1 To j" (тоже всего 4 итерации) мы переносим эти данные о кол-ве в нужные ячейки результ. массива. Все, массив готов! Остается только скопировать его в нужное место таблицы. Это и делается последними строками макроса.
Да, вы лучше дебагером один раз пройдите по шагам и все сразу станет понятно.
Ну, на первый взгляд, код может показаться непонятным (хотя, я практически каждую строчку прокоментировал), но это та небольшая цена, которую приходится платить за быстрые алгоритмы :)
Зато, никаких проверок и никаких лишних телодвижений - три коротеньких цикла и все условия задачи выполнены :)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Данные берутся со столбца "убывает"?

Этот цикл проходит по непустым ячейкам в столбце W. Если говорить о файле-примере, то это будет всего 4 итерации. И при этом, в словарь мы занесем тоже всего 4 значения (номера строк для упр.5, УСАДН3 и т.д), которые нам понадобятся в след. цикле.
След. цикл - тоже всего 4 итерации, по непустым ячейкам в столбце V. При этом, на каждом шаге этого (второго) цикла, без каких-либо проверок, мы уже имеем полную информацию по убытии и прибытии одного из 4-х перемещений, поэтому на каждой итерации мы заполняем полностью всю "строчку" результ. массива, кроме кол-ва. (каждая "строчка" результ. массива соответствует одной строке таблицы на листе "ППСС", т.е., за эти 4 итерации мы заполняем всю таблицу). А 2 последние строки второго цикла, подготавливают данные для подсчета кол-ва, задавая уникальность ключа, по указанным вами условиям, и если ключ повторяется, то в словарь не добавляется новая запись, а инкрементируется значение по этому ключу. Таким образом, после выхода из этого второго цикла у нас уже есть ВСЕ данные для заполнения таблицы, и все они, кроме кол-ва, уже записаны в результ. массив, и в нужные ячейки. А данные по кол-ву тоже уже готовы, но только лежат во втором словаре. И след. циклом "For i = 1 To j" (тоже всего 4 итерации) мы переносим эти данные о кол-ве в нужные ячейки результ. массива. Все, массив готов! Остается только скопировать его в нужное место таблицы. Это и делается последними строками макроса.
Да, вы лучше дебагером один раз пройдите по шагам и все сразу станет понятно.
Ну, на первый взгляд, код может показаться непонятным (хотя, я практически каждую строчку прокоментировал), но это та небольшая цена, которую приходится платить за быстрые алгоритмы :)
Зато, никаких проверок и никаких лишних телодвижений - три коротеньких цикла и все условия задачи выполнены :)

Автор - KSV
Дата добавления - 19.05.2015 в 15:35
KSV Дата: Вторник, 19.05.2015, 15:56 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
а проводить какие либо операции, например ВУС делить по три цифры и заполнять 3,4 и 10,11 столбцы листа-результата

Вы можете это сделать, например, во втором цикле, и сразу поместить нужные значения в нужные ячейки результ. массива, или позже, в любом месте программы, до копирования результ. массива в таблицу.
и заполнять 3,4 и 10,11 столбцы листа-результата

Тоже самое - просто занесите нужные значения в нужные ячейки массива (какие ячейки нужные, можно понять спроецировав результ. массив на таблицу, на листе "ППСС")
или проводить сравнение

Тоже, все сравнения и вычисления лучше производить над ячейками массива - это быстрее, чем работать с ячейками таблицы Excel.
например если в листе МИРВОЙНА столбец I содержит значение НЕТ, то данное перемещение не рассматривать, подскажите в каком месте изменить код?

для этого нужно будет не менять код, а дописывать (например, предварительно устанавливать фильтр), а в существующем коде ничего менять не нужно - в нем нет "лишних" строк, а каждая существующая команда - нужна и важна :)
[p.s.]Каждая строка кода прокомментирована, + Я полностью описал вам логику алгоритма и практически расписал построчно... Надеюсь, теперь этот код для вас стал понятным.[/p.s.]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
а проводить какие либо операции, например ВУС делить по три цифры и заполнять 3,4 и 10,11 столбцы листа-результата

Вы можете это сделать, например, во втором цикле, и сразу поместить нужные значения в нужные ячейки результ. массива, или позже, в любом месте программы, до копирования результ. массива в таблицу.
и заполнять 3,4 и 10,11 столбцы листа-результата

Тоже самое - просто занесите нужные значения в нужные ячейки массива (какие ячейки нужные, можно понять спроецировав результ. массив на таблицу, на листе "ППСС")
или проводить сравнение

Тоже, все сравнения и вычисления лучше производить над ячейками массива - это быстрее, чем работать с ячейками таблицы Excel.
например если в листе МИРВОЙНА столбец I содержит значение НЕТ, то данное перемещение не рассматривать, подскажите в каком месте изменить код?

для этого нужно будет не менять код, а дописывать (например, предварительно устанавливать фильтр), а в существующем коде ничего менять не нужно - в нем нет "лишних" строк, а каждая существующая команда - нужна и важна :)
[p.s.]Каждая строка кода прокомментирована, + Я полностью описал вам логику алгоритма и практически расписал построчно... Надеюсь, теперь этот код для вас стал понятным.[/p.s.]

Автор - KSV
Дата добавления - 19.05.2015 в 15:56
Skif-F Дата: Вторник, 19.05.2015, 22:37 | Сообщение № 15
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Зачем вообще "запас прочности"

Вот за этим:
И еще, ..., подскажите в каком месте изменить код?

Информация к размышлению в прилагаемом файле. Запустите свой и мой варианты.
Да, ещё попробуйте нажать отмену, когда программа спросит о необходимости удалять существующий лист.

P.S. Случаи разные бывают, а заказчики - очень непредсказуемые люди.
К сообщению приложен файл: _6024008-2.zip (53.1 Kb)
 
Ответить
Сообщение
Зачем вообще "запас прочности"

Вот за этим:
И еще, ..., подскажите в каком месте изменить код?

Информация к размышлению в прилагаемом файле. Запустите свой и мой варианты.
Да, ещё попробуйте нажать отмену, когда программа спросит о необходимости удалять существующий лист.

P.S. Случаи разные бывают, а заказчики - очень непредсказуемые люди.

Автор - Skif-F
Дата добавления - 19.05.2015 в 22:37
KSV Дата: Среда, 20.05.2015, 23:37 | Сообщение № 16
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Вот за этим:

Вроди бы общаемся на одном языке, но вы меня не понимаете (или делаете вид)...
Я вам объяснил и показал в своем коде, что нет смысла тратить время и ресурсы на проверку и наращивание массива в цикле, если мы МОЖЕМ СРАЗУ УЗНАТЬ ЕГО РАЗМЕР.
Тем более, что данный случай, позволяет реализовать алгоритм вообще БЕЗ ЕДИНОЙ проверки каких-либо условий (см. мой код)
Я не пытался доказать, что мой алгоритм хороший, а ваш - плохой (а по-сути, у нас просто разные реализации, практически, одного алгоритма :) ), я лишь пытался вам объяснить, что оптимизировав свой код (убрав из циклов "лишние" действия), вы сделаете его еще быстрее! Хотя он и так достаточно быстрый и при некоторых условиях догоняет и даже обгоняет мой! (про "узкие места" в моем коде я знаю :) - могу исправить, но попозже...)

Да, ещё попробуйте нажать отмену

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

Запустите свой и мой варианты.

А такой ситуации быть не должно, т.к. я ему еще изначально делал выбор из списка (для удобства) и подсветку некоторых возможных ошибок, просто в этом файле-примере этого не было (теперь есть). А добавив в код 2 строки, будут обрабатываться и такие ситуации... (причем, добавление этих строк вообще никак не скажется на быстродействии)
К сообщению приложен файл: _6024008-1.zip (42.2 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Четверг, 21.05.2015, 00:46
 
Ответить
Сообщение
Вот за этим:

Вроди бы общаемся на одном языке, но вы меня не понимаете (или делаете вид)...
Я вам объяснил и показал в своем коде, что нет смысла тратить время и ресурсы на проверку и наращивание массива в цикле, если мы МОЖЕМ СРАЗУ УЗНАТЬ ЕГО РАЗМЕР.
Тем более, что данный случай, позволяет реализовать алгоритм вообще БЕЗ ЕДИНОЙ проверки каких-либо условий (см. мой код)
Я не пытался доказать, что мой алгоритм хороший, а ваш - плохой (а по-сути, у нас просто разные реализации, практически, одного алгоритма :) ), я лишь пытался вам объяснить, что оптимизировав свой код (убрав из циклов "лишние" действия), вы сделаете его еще быстрее! Хотя он и так достаточно быстрый и при некоторых условиях догоняет и даже обгоняет мой! (про "узкие места" в моем коде я знаю :) - могу исправить, но попозже...)

Да, ещё попробуйте нажать отмену

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

Запустите свой и мой варианты.

А такой ситуации быть не должно, т.к. я ему еще изначально делал выбор из списка (для удобства) и подсветку некоторых возможных ошибок, просто в этом файле-примере этого не было (теперь есть). А добавив в код 2 строки, будут обрабатываться и такие ситуации... (причем, добавление этих строк вообще никак не скажется на быстродействии)

Автор - KSV
Дата добавления - 20.05.2015 в 23:37
Skif-F Дата: Четверг, 21.05.2015, 17:14 | Сообщение № 17
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Весь наш с Вами спор заключается в этом:
А такой ситуации быть не должно...

У нас с Вами разные подходы: Вы сделали код, чисто в рамках поставленной задачи, я немного расширил эти рамки, заложив возможность к более простому расширению функционала (в мою систему проще вставить дополнительные условия и проверки). Просто я считаю, что не надо надеяться, что пользователь всегда будет следовать раз установленным правилам, и стараюсь заложить тот самый "запас прочности", причём, не только в формате данных, но и в их анализе.
Ещё я не люблю слепо следовать "голым" возможностям Excel, что подтверждается:
...и при некоторых условиях догоняет и даже обгоняет ...

Я сравнил работу на нескольких сотнях строк - эффект тот же.


Сообщение отредактировал Skif-F - Пятница, 22.05.2015, 14:15
 
Ответить
СообщениеВесь наш с Вами спор заключается в этом:
А такой ситуации быть не должно...

У нас с Вами разные подходы: Вы сделали код, чисто в рамках поставленной задачи, я немного расширил эти рамки, заложив возможность к более простому расширению функционала (в мою систему проще вставить дополнительные условия и проверки). Просто я считаю, что не надо надеяться, что пользователь всегда будет следовать раз установленным правилам, и стараюсь заложить тот самый "запас прочности", причём, не только в формате данных, но и в их анализе.
Ещё я не люблю слепо следовать "голым" возможностям Excel, что подтверждается:
...и при некоторых условиях догоняет и даже обгоняет ...

Я сравнил работу на нескольких сотнях строк - эффект тот же.

Автор - Skif-F
Дата добавления - 21.05.2015 в 17:14
KSV Дата: Четверг, 21.05.2015, 19:54 | Сообщение № 18
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
предлагаю вообще закрыть тему, т.к. мы не понимаем друг-друга, а спор ради спора - мне не интересен.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениепредлагаю вообще закрыть тему, т.к. мы не понимаем друг-друга, а спор ради спора - мне не интересен.

Автор - KSV
Дата добавления - 21.05.2015 в 19:54
Sashagor1982 Дата: Четверг, 21.05.2015, 21:22 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Спасибо Всем участникам обсуждения темы, благодаря Вам программа полностью отработана и вставлена в основную программу, работает удачно. Отдельно спасибо за Внимание к нестандартным ситуациям типа "Закрытие окна", в основной программе данная ошибка исправлена.


Сообщение отредактировал Sashagor1982 - Четверг, 21.05.2015, 21:22
 
Ответить
СообщениеСпасибо Всем участникам обсуждения темы, благодаря Вам программа полностью отработана и вставлена в основную программу, работает удачно. Отдельно спасибо за Внимание к нестандартным ситуациям типа "Закрытие окна", в основной программе данная ошибка исправлена.

Автор - Sashagor1982
Дата добавления - 21.05.2015 в 21:22
Skif-F Дата: Среда, 27.05.2015, 00:05 | Сообщение № 20
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Ура. Наконец-то нашёл время ответить.
Меня всегда удивляли люди, считающие, что есть два мнения - их и неправильное.
а спор ради спора - мне не интересен

Почему же ради спора? Ради истины!
Но продолжить предлагаю тут..., а эту тему более не тревожить.
 
Ответить
СообщениеУра. Наконец-то нашёл время ответить.
Меня всегда удивляли люди, считающие, что есть два мнения - их и неправильное.
а спор ради спора - мне не интересен

Почему же ради спора? Ради истины!
Но продолжить предлагаю тут..., а эту тему более не тревожить.

Автор - Skif-F
Дата добавления - 27.05.2015 в 00:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет совпадений в ячейках (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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