Здравствуйте.Снова обращаюсь к Вам за помощью.Есть хороший макрос (я его немного уменьшил) ,но необходимо условие- проверка на наличие в дополнительном массиве- попарно.На программфоруме -увидел мысль,что можно сделать такое с помощью счетчика на словаре.
Здравствуйте.Снова обращаюсь к Вам за помощью.Есть хороший макрос (я его немного уменьшил) ,но необходимо условие- проверка на наличие в дополнительном массиве- попарно.На программфоруме -увидел мысль,что можно сделать такое с помощью счетчика на словаре.megavlom
Уважаемый RAN. проблема в том, что при больших числах макрос выдаст большое количество комбинаций(ведь надо не весь файл ,малую часть).На таких массивах это будет очень долго.Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.Вот потому и надо вставить эту проверку в сам перебор.Ваш же вариант предполагает выгрузку перебора,а потом сравнение.
Уважаемый RAN. проблема в том, что при больших числах макрос выдаст большое количество комбинаций(ведь надо не весь файл ,малую часть).На таких массивах это будет очень долго.Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.Вот потому и надо вставить эту проверку в сам перебор.Ваш же вариант предполагает выгрузку перебора,а потом сравнение.megavlom
Из спортивного интереса заменил в Sub ertert(x, y) коллекцию на модный теперь Filter (привет Сереге ). Попробуйте на больших диапазонах - быстрее, чем с коллекцией? Насчет "при rez большем ,чем 65000 макрос выдает ошибку" - посмотрите в самом верху модуля
Code
Option Explicit Dim rez&(1 To 60000, 1 To 6), j&
60000 замените на 1000000, например. Но тогда, чтобы выгрузить весь массив, потребуется Ексель 2007/10. Попарную проверку не делал. Наверное, не стоит внедрять доп. проверку, а сделать еще процедуру или функцию. Нужен примерчик покрупнее.
Из спортивного интереса заменил в Sub ertert(x, y) коллекцию на модный теперь Filter (привет Сереге ). Попробуйте на больших диапазонах - быстрее, чем с коллекцией? Насчет "при rez большем ,чем 65000 макрос выдает ошибку" - посмотрите в самом верху модуля
Code
Option Explicit Dim rez&(1 To 60000, 1 To 6), j&
60000 замените на 1000000, например. Но тогда, чтобы выгрузить весь массив, потребуется Ексель 2007/10. Попарную проверку не делал. Наверное, не стоит внедрять доп. проверку, а сделать еще процедуру или функцию. Нужен примерчик покрупнее.nilem
Здравствуйте Форумчане.Michael_S спасибо за подсказку- этого нюанса не знал( 2007 и установил для этого макроса- проверить).Nilem ещё раз спасибо Вам за этот макрос (условия остались прежними,когда Вы его писали.Только в части проверки словарем нужно было делать сортировку по горизонтали: а так он медленно работает,поэтому и приходится пробовать по другому.Тем более один товарищ на форуме подсказал идею. Если теперь с выгрузкой нормально,то останется словарем проверять на наличие пары цифр в каждой комбинации либо попробовать как RAN предложил :что быстрее.) Но протестировать смогу только завтра.
Здравствуйте Форумчане.Michael_S спасибо за подсказку- этого нюанса не знал( 2007 и установил для этого макроса- проверить).Nilem ещё раз спасибо Вам за этот макрос (условия остались прежними,когда Вы его писали.Только в части проверки словарем нужно было делать сортировку по горизонтали: а так он медленно работает,поэтому и приходится пробовать по другому.Тем более один товарищ на форуме подсказал идею. Если теперь с выгрузкой нормально,то останется словарем проверять на наличие пары цифр в каждой комбинации либо попробовать как RAN предложил :что быстрее.) Но протестировать смогу только завтра.megavlom
Здравствуйте. Michael_S действительно,если пересохранить в другом формате, можно увеличить количество строк при выгрузке.Nilem попробовал Ваш новый вариант- чуть дольше считает и допускает ошибки(не все варианты расчитывает),поэтому лучше старый.А дополнение со словарем попробую сделать сам.Большое Вам спасибо.Если что то не пойму ,придется снова Вас беспокоить.
Здравствуйте. Michael_S действительно,если пересохранить в другом формате, можно увеличить количество строк при выгрузке.Nilem попробовал Ваш новый вариант- чуть дольше считает и допускает ошибки(не все варианты расчитывает),поэтому лучше старый.А дополнение со словарем попробую сделать сам.Большое Вам спасибо.Если что то не пойму ,придется снова Вас беспокоить.megavlom
Здравствуйте.Все же пришлось беспокоить.На Dictionary для уникальности приходится делать связку &"|"& нескольких ячеек(6) ,а во втором массиве две ячейки.Как прописать проверку на наличие двух ячеек(цифр) в строке из шести ячеек(цифр).
Здравствуйте.Все же пришлось беспокоить.На Dictionary для уникальности приходится делать связку &"|"& нескольких ячеек(6) ,а во втором массиве две ячейки.Как прописать проверку на наличие двух ячеек(цифр) в строке из шести ячеек(цифр).megavlom
Если не смотреть файл, то ответ простой - Instr("строка из шести ячеек(цифр)","строка из двух ячеек(цифр)") Если больше 0, то содержит. Но посмотрел файл - нет, в словаре Вы так, как начали делать, совпадение не найдёте. Разве что если циклом проверять каждый ключ на Instr().
Если не смотреть файл, то ответ простой - Instr("строка из шести ячеек(цифр)","строка из двух ячеек(цифр)") Если больше 0, то содержит. Но посмотрел файл - нет, в словаре Вы так, как начали делать, совпадение не найдёте. Разве что если циклом проверять каждый ключ на Instr().Hugo
Здравствуйте Michael_S.Я спрашиваю по работе макросов,функциями листа эту задачу не решить- большой размер файла и время пересчета (пробовал).Наметился другой алгоритм решения этой задачи,да и спасибо Hugo за подсказку( интереса ради надо попробывать).Вопросы по этой теме уже задавать не буду.Спасибо Вам всем.
Здравствуйте Michael_S.Я спрашиваю по работе макросов,функциями листа эту задачу не решить- большой размер файла и время пересчета (пробовал).Наметился другой алгоритм решения этой задачи,да и спасибо Hugo за подсказку( интереса ради надо попробывать).Вопросы по этой теме уже задавать не буду.Спасибо Вам всем.megavlom
Так я и хотел макросом попробовать свой алгоритм, которым я решал подобные задачи еще на Z-Spectrum, c 48 kB памяти.... Только не уверен, что правильно понял задачу, а также необходимо знать максимальное число.
Quote (megavlom)
спрашиваю по работе макросов,
Так я и хотел макросом попробовать свой алгоритм, которым я решал подобные задачи еще на Z-Spectrum, c 48 kB памяти.... Только не уверен, что правильно понял задачу, а также необходимо знать максимальное число.Michael_S
off - Я тоже на Spectrum работу делал - вёл подсчёт и распечатку квитков жильцам многоквартирного дома для одной домохозяйки (тогда только у нас жильё назад вернули хозяевам). Тогда вероятно и написал первую программу на Бейсике - точно не помню в деталях, но было интересно
off - Я тоже на Spectrum работу делал - вёл подсчёт и распечатку квитков жильцам многоквартирного дома для одной домохозяйки (тогда только у нас жильё назад вернули хозяевам). Тогда вероятно и написал первую программу на Бейсике - точно не помню в деталях, но было интересно Hugo
Здравствуйте.ИЗВИНИТЕ меня Michael_S .Я на этом сайте с полгода и видел, что Вы очень хорошо умеете оперировать с функциями,но вот с макросами ...Если задача:на лист будут выгружатся комбинации разных цифр по 6 в строке(может до 800 тыс) .Есть второй массив из двух столбцов:т.е. по 2 цифры в строке.Надо сравнить второй массив с первым построчно.Если в строке первого будет совпадение двух цифр из любой строки второго массива,то эту строку (1) массива не считать- удалить.Мах число 97. Но это все долго.Я нашел другой алгоритм с find или с match.пока пытаюсь их приспособить.Еще раз прошу меня извинить.
Здравствуйте.ИЗВИНИТЕ меня Michael_S .Я на этом сайте с полгода и видел, что Вы очень хорошо умеете оперировать с функциями,но вот с макросами ...Если задача:на лист будут выгружатся комбинации разных цифр по 6 в строке(может до 800 тыс) .Есть второй массив из двух столбцов:т.е. по 2 цифры в строке.Надо сравнить второй массив с первым построчно.Если в строке первого будет совпадение двух цифр из любой строки второго массива,то эту строку (1) массива не считать- удалить.Мах число 97. Но это все долго.Я нашел другой алгоритм с find или с match.пока пытаюсь их приспособить.Еще раз прошу меня извинить.megavlom
Обработка массива более 1 000 000 строк занимает примерно 25 сек. А вот удаление.... в моем примере нужно удалять ~270 000 строк... занимает это... короче очень долго - я не дождался удаления всех
Обработка массива более 1 000 000 строк занимает примерно 25 сек. А вот удаление.... в моем примере нужно удалять ~270 000 строк... занимает это... короче очень долго - я не дождался удаления всехMichael_S
Как будут выгружаться? 6 в строке - это 5 пар. Берёте второй массив в словарь (один раз, можно словарь сделать публичным, если код будете запускать много раз), и проверяете 5 раз по словарю наличие этих пар. Или эти пары - любое сочетание цифр шестёрки? Тогда комбинаций намного больше... В примере примерно так и сделано, но я не понял - что именно нужно? Что там с цветом - каких комбинаций и где не должно быть?
Пока такую заготовку прикинул - выводит комбинации всех цифр строки - их нужно проверить по словарю?
Code
Sub tt() Dim a, i&, ii&, x& a = [k2:p13] For x = 1 To UBound(a) For i = 1 To UBound(a, 2) For ii = 0 To UBound(a, 2) - 1 If (ii + 1) <> i Then Debug.Print a(x, i) & "|" & a(x, ii + 1) Next ii, i, x End Sub
Тогда добавить в начале перебор массива A2:B14 и создание словаря, потом вместо debug.print проверку наличия в словаре.
Как будут выгружаться? 6 в строке - это 5 пар. Берёте второй массив в словарь (один раз, можно словарь сделать публичным, если код будете запускать много раз), и проверяете 5 раз по словарю наличие этих пар. Или эти пары - любое сочетание цифр шестёрки? Тогда комбинаций намного больше... В примере примерно так и сделано, но я не понял - что именно нужно? Что там с цветом - каких комбинаций и где не должно быть?
Пока такую заготовку прикинул - выводит комбинации всех цифр строки - их нужно проверить по словарю?
Code
Sub tt() Dim a, i&, ii&, x& a = [k2:p13] For x = 1 To UBound(a) For i = 1 To UBound(a, 2) For ii = 0 To UBound(a, 2) - 1 If (ii + 1) <> i Then Debug.Print a(x, i) & "|" & a(x, ii + 1) Next ii, i, x End Sub
Тогда добавить в начале перебор массива A2:B14 и создание словаря, потом вместо debug.print проверку наличия в словаре.Hugo
Здравствуйте Уважаемый Hugo.Я уже писал, что тот вариант будет считаться долго.Нашел как сделать по другому,но чтоб реализовать? Дней пять искал по разным форумам: как сделать.Ваш пост дал м i с л ь как - надо все перевернуть.Спасибо за код и Большое Спасибо за намек.Michael_S макросы, которые могут сделать эту работу управляются за три мин.Но для меня это очень долго.Но ничего, думаю скоро управлюсь.Кстати был не прав - на планете встречал Ваши макросы.
Здравствуйте Уважаемый Hugo.Я уже писал, что тот вариант будет считаться долго.Нашел как сделать по другому,но чтоб реализовать? Дней пять искал по разным форумам: как сделать.Ваш пост дал м i с л ь как - надо все перевернуть.Спасибо за код и Большое Спасибо за намек.Michael_S макросы, которые могут сделать эту работу управляются за три мин.Но для меня это очень долго.Но ничего, думаю скоро управлюсь.Кстати был не прав - на планете встречал Ваши макросы.megavlom
макросы, которые могут сделать эту работу управляются за три мин
Я ж говорю - обработка массива более миллиона строк у меня занимает примерно 25 сек. Это я делаю без словарей. На словаре наверно можно еще сократить - примерно до 15-20 А вот удалять строки - у мня почему-то долго. Может экран не отключается, может еще что... Зы. если у Вас 2000 пар - то практически в каждой строке будут совпадения.
Quote (megavlom)
макросы, которые могут сделать эту работу управляются за три мин
Я ж говорю - обработка массива более миллиона строк у меня занимает примерно 25 сек. Это я делаю без словарей. На словаре наверно можно еще сократить - примерно до 15-20 А вот удалять строки - у мня почему-то долго. Может экран не отключается, может еще что... Зы. если у Вас 2000 пар - то практически в каждой строке будут совпадения.Michael_S