Alex_ST, прошу помочь девушке!!! Думаю для вас это пустяковый вопрос. Вопрос по функции FuzzyVLOOKUР, она мне идеально подходит в работе. Когда я скачала всем известный пример с форума, у меня все работает в excel, НО когда скопировала или набрала FuzzyVLOOKUР в новой книге, то НЕ работает. ПОЧЕМУ??? Наверно это завязано на макросах, но в этом я ... тук, тук. Извиняюсь за тупой вопрос, но надеюсь подскажите
Alex_ST, прошу помочь девушке!!! Думаю для вас это пустяковый вопрос. Вопрос по функции FuzzyVLOOKUР, она мне идеально подходит в работе. Когда я скачала всем известный пример с форума, у меня все работает в excel, НО когда скопировала или набрала FuzzyVLOOKUР в новой книге, то НЕ работает. ПОЧЕМУ??? Наверно это завязано на макросах, но в этом я ... тук, тук. Извиняюсь за тупой вопрос, но надеюсь подскажите Zliliya
А основные творцы нечёткого поиска здесь - nerv , Формуляр и v__step
- FuzzyVLOOKUР тут выкладывалась неоднократно и потому догадаться, в примере из какого поста у Вас всё работает, а в своей книге - не представляется возможным - посмотрите на подпись под моими постами, а за одно и на рекомендации форума по формату выкладываемых файлов. Я НЕ ЛЮБЛЮ Офис версий старше чем 2003. А потому дома его на компе и не держу. А на работе мне некогда заниматься программами, да и сисадмины не дают скачивать файлы с макросами. - Вы приложили пример, в котором по определению не может быть никаких макросов, а потому даже пытаться понять, почему у Вас не работает, нет смысла. Ответ единственный: у Вас в книге НЕТ МАКРОСОВ, потому они и не работают.
А основные творцы нечёткого поиска здесь - nerv , Формуляр и v__step
- FuzzyVLOOKUР тут выкладывалась неоднократно и потому догадаться, в примере из какого поста у Вас всё работает, а в своей книге - не представляется возможным - посмотрите на подпись под моими постами, а за одно и на рекомендации форума по формату выкладываемых файлов. Я НЕ ЛЮБЛЮ Офис версий старше чем 2003. А потому дома его на компе и не держу. А на работе мне некогда заниматься программами, да и сисадмины не дают скачивать файлы с макросами. - Вы приложили пример, в котором по определению не может быть никаких макросов, а потому даже пытаться понять, почему у Вас не работает, нет смысла. Ответ единственный: у Вас в книге НЕТ МАКРОСОВ, потому они и не работают.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 16.03.2014, 16:35
Добавил к "обычной" версии SimText возможность сравнения неполных фрагментов. Сравнение неполных фрагментов позволяет учитывать слова, которые короче заданной длины фрагмента - Q. В данном примере Q=3, тем не менее, поиск успешно различает модели по 1-символьным индексам, что ранее было невозможно. Кроме того, возможность увеличения длины фрагента без ущерба для сравнения коротких слов значительно снижает влияние случайных совпадений. В данном случае, iPad и iPhone дают 0% сходства, а при Q=2 дают 33%.
Возникают уже некоторые проблемы с учётом разных версий в названиях файлов. На данный момент сформировались 2 ветки алгоритма: "обычная" - или "первоначальная" - будет называться просто SimText<№ версии>, алгоритм с попарным сравнением слов будет называться SimTextХ<№ версии>. Да ещё наклёвывается отдельная ветка для индексирования по справочнику она будет называться SimTextIdx<№ версии>.
Добавил к "обычной" версии SimText возможность сравнения неполных фрагментов. Сравнение неполных фрагментов позволяет учитывать слова, которые короче заданной длины фрагмента - Q. В данном примере Q=3, тем не менее, поиск успешно различает модели по 1-символьным индексам, что ранее было невозможно. Кроме того, возможность увеличения длины фрагента без ущерба для сравнения коротких слов значительно снижает влияние случайных совпадений. В данном случае, iPad и iPhone дают 0% сходства, а при Q=2 дают 33%.
Возникают уже некоторые проблемы с учётом разных версий в названиях файлов. На данный момент сформировались 2 ветки алгоритма: "обычная" - или "первоначальная" - будет называться просто SimText<№ версии>, алгоритм с попарным сравнением слов будет называться SimTextХ<№ версии>. Да ещё наклёвывается отдельная ветка для индексирования по справочнику она будет называться SimTextIdx<№ версии>.Формуляр
Формуляр, доброго времени суток! Сразу скажу в VBA очень плохо разбираюсь. Подскажите пожалуйста, что нужно поменять в коде, что бы функция "=FindBestMatchTxt" возвращала не ссылку на ячейку, а значение ячейки. Если я правильно понял необходимо изменить следующую часть кода: [vba]
Код
Public Function FindBestMatchTxt(lookup_value As Variant, lookup_array As Variant, _ Optional threshold As Double = 0) As Integer
[/vba] В какой части кода меняется метрика "F="? Что она регулирует?
Формуляр, доброго времени суток! Сразу скажу в VBA очень плохо разбираюсь. Подскажите пожалуйста, что нужно поменять в коде, что бы функция "=FindBestMatchTxt" возвращала не ссылку на ячейку, а значение ячейки. Если я правильно понял необходимо изменить следующую часть кода: [vba]
Код
Public Function FindBestMatchTxt(lookup_value As Variant, lookup_array As Variant, _ Optional threshold As Double = 0) As Integer
[/vba] В какой части кода меняется метрика "F="? Что она регулирует?Vlad_i_mir
Формуляр, Саша, доброго времени суток! Попробовал Ваш код VBA ( функцию "=FindBestMatchTxt") применить к своему случаю, он практически такой же как описываются у Вас, но у меня не названия фирм, а адреса. Не получилось, он не верно определяет по последней составляющей - номеру дома или корпуса. В VBA не силён поэтому не могу понять в чём причина. Пробовал менять Q (с 2 на 3 и 3 на 2) и F (c 0 на 1 и 1 на 0) - не помогло. Помогите пожалуйста. Файл пример прикладываю.
Формуляр, Саша, доброго времени суток! Попробовал Ваш код VBA ( функцию "=FindBestMatchTxt") применить к своему случаю, он практически такой же как описываются у Вас, но у меня не названия фирм, а адреса. Не получилось, он не верно определяет по последней составляющей - номеру дома или корпуса. В VBA не силён поэтому не могу понять в чём причина. Пробовал менять Q (с 2 на 3 и 3 на 2) и F (c 0 на 1 и 1 на 0) - не помогло. Помогите пожалуйста. Файл пример прикладываю.Vlad_i_mir
Формуляр, Саша, доброго времени суток! Попробовал Ваш код VBA ( функцию "=FindBestMatchTxt") применить к своему случаю, он практически такой же как описываются у Вас, но у меня не названия фирм, а адреса. Не получилось, он не верно определяет по последней составляющей - номеру дома или корпуса. В VBA не силён поэтому не могу понять в чём причина. Пробовал менять Q (с 2 на 3 и 3 на 2) и F (c 0 на 1 и 1 на 0) - не помогло. Помогите пожалуйста. Файл пример прикладываю. К сообщению приложен файл: SimText.xls--.rar(46Kb)
Помогите пожалуйста кто-нибудь разобраться в чём причина. В VBA к сожалению не силён.
Формуляр, Саша, доброго времени суток! Попробовал Ваш код VBA ( функцию "=FindBestMatchTxt") применить к своему случаю, он практически такой же как описываются у Вас, но у меня не названия фирм, а адреса. Не получилось, он не верно определяет по последней составляющей - номеру дома или корпуса. В VBA не силён поэтому не могу понять в чём причина. Пробовал менять Q (с 2 на 3 и 3 на 2) и F (c 0 на 1 и 1 на 0) - не помогло. Помогите пожалуйста. Файл пример прикладываю. К сообщению приложен файл: SimText.xls--.rar(46Kb)
Помогите пожалуйста кто-нибудь разобраться в чём причина. В VBA к сожалению не силён.Vlad_i_mir
Во-первых, нет разделителя перед номером дома, поэтому номер воспринимается как продолжение предыдущего слова. Во-вторых, вы использовали не самую свежую версию, в которой не полностью поддерживалась опция сравнения цифр. К тому же, в списке поиска много дублей, что совершенно бессмысленно и замедляет пересчёт. А самое главное, FindBestMatchTxt() вообще плохо подходит под данную задачу: она ищет заданную ключевую строку в списке поиска, а вам надо наоборот, подбирать ключевые строки из списка поиска под образцовую строку. Получается, вроде бы, та же задача только задом-наперёд. Установка F=20 дала более-менее подходящий результат.
Однако, гораздо лучше использовать для вашей цели не поиск, а индексирование, как вот здесь. Посмотрю в ближайшее время, как адаптировать для ваших нужд.
Во-первых, нет разделителя перед номером дома, поэтому номер воспринимается как продолжение предыдущего слова. Во-вторых, вы использовали не самую свежую версию, в которой не полностью поддерживалась опция сравнения цифр. К тому же, в списке поиска много дублей, что совершенно бессмысленно и замедляет пересчёт. А самое главное, FindBestMatchTxt() вообще плохо подходит под данную задачу: она ищет заданную ключевую строку в списке поиска, а вам надо наоборот, подбирать ключевые строки из списка поиска под образцовую строку. Получается, вроде бы, та же задача только задом-наперёд. Установка F=20 дала более-менее подходящий результат.
Однако, гораздо лучше использовать для вашей цели не поиск, а индексирование, как вот здесь. Посмотрю в ближайшее время, как адаптировать для ваших нужд.Формуляр
Александр, результат если "причесать" списки действительно значительно лучше, ну и F=20. Буду следить за темой, если у Вас получиться адаптировать ваш код к моей ситуации, буду рад, это мне очень поможет. Часто приходится сталкиваться с проблемой сопоставления адресов.
Александр, результат если "причесать" списки действительно значительно лучше, ну и F=20. Буду следить за темой, если у Вас получиться адаптировать ваш код к моей ситуации, буду рад, это мне очень поможет. Часто приходится сталкиваться с проблемой сопоставления адресов.Vlad_i_mir
Vlad_i_mir, добил наконец-то вариант индексирвания списка под вашу задачу. Но понял, что получилась уже какая-то иная "сказочка", и что люди с аналогичными задачами врядли догадаются искать решение в данной теме. По сему, предлагаю продолжить разговор в новой теме Индексирование списка на базе нечёткого поиска
Vlad_i_mir, добил наконец-то вариант индексирвания списка под вашу задачу. Но понял, что получилась уже какая-то иная "сказочка", и что люди с аналогичными задачами врядли догадаются искать решение в данной теме. По сему, предлагаю продолжить разговор в новой теме Индексирование списка на базе нечёткого поискаФормуляр
Доброго времени суток, попробовал для своих нужд функцию "FuzzyVLOOKUP" результаты немного неоднозначные если при больших объемах данных (от 20 тыс.) идет падение производительности, то это понятно. но почему такие неоднозначные результаты поиска, я не могу понять, функцию я переименовал, для облегчения работы прикладываю файл с результатами работы
Доброго времени суток, попробовал для своих нужд функцию "FuzzyVLOOKUP" результаты немного неоднозначные если при больших объемах данных (от 20 тыс.) идет падение производительности, то это понятно. но почему такие неоднозначные результаты поиска, я не могу понять, функцию я переименовал, для облегчения работы прикладываю файл с результатами работыillios
при попытке задать массив более 30 000 строк SimText выбивает ошибку #ЗНАЧ база с которой необходимо работать - 100 000 строк, в одном листе или по 50 000 в 2 листах
при попытке задать массив более 30 000 строк SimText выбивает ошибку #ЗНАЧ база с которой необходимо работать - 100 000 строк, в одном листе или по 50 000 в 2 листахillios
Да, на таких списках Integer повышибало... Подправил. В SearchList на листе Sheet1 сейчас 55555 строк. На таких объёмах лучше использовать вызов через макрос, чем напрямую UDF. Тогда и ошибки будт диагностироваться по-человечески.
Подозреваю, что более серьёзные проблемы могут вылезти на справочнике. Какой там примерно объём (в записях и в словах)?
Да, на таких списках Integer повышибало... Подправил. В SearchList на листе Sheet1 сейчас 55555 строк. На таких объёмах лучше использовать вызов через макрос, чем напрямую UDF. Тогда и ошибки будт диагностироваться по-человечески.
Подозреваю, что более серьёзные проблемы могут вылезти на справочнике. Какой там примерно объём (в записях и в словах)?Формуляр
Так это получается справочник размером с индексируемый список поиска что ли? Конечно будет вышибать. Там довольно жёсткие ограничения по объёму прописаны в этой теме. На такой справочник никакой оперативки не хватит.
При таком раскладе остаётся FindBestMatchTxt(). Только будет всё очень небыстро.
Так это получается справочник размером с индексируемый список поиска что ли? Конечно будет вышибать. Там довольно жёсткие ограничения по объёму прописаны в этой теме. На такой справочник никакой оперативки не хватит.
При таком раскладе остаётся FindBestMatchTxt(). Только будет всё очень небыстро.Формуляр
Добрый День! Формуляр, может быть Вы могли бы помочь, пожалуйста. Добрый Вечер! Реализую задачу нечёткого поиска на VBA из Excel 2016 на 300 000 строках на маленьком объёме вроде работало, но файл в 300 000 строк. Получаю ОШИБКУ - "RunTime Error 7 - Out of Memory"
Добавлено (16.09.2015, 19:22) --------------------------------------------- ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам - ДЛЯ ПРОВЕРКИ НАБОРА ГРУПП
7) создать отчёт
My WebPage ( Мир MS Excel/Загрузить данные в массив 300 000 строк - Мир MS Excel)
Добрый День! Формуляр, может быть Вы могли бы помочь, пожалуйста. Добрый Вечер! Реализую задачу нечёткого поиска на VBA из Excel 2016 на 300 000 строках на маленьком объёме вроде работало, но файл в 300 000 строк. Получаю ОШИБКУ - "RunTime Error 7 - Out of Memory"
Добавлено (16.09.2015, 19:22) --------------------------------------------- ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам - ДЛЯ ПРОВЕРКИ НАБОРА ГРУПП
7) создать отчёт
My WebPage ( Мир MS Excel/Загрузить данные в массив 300 000 строк - Мир MS Excel)SvetaS
Формуляр, помогите, пожалуйста [moder]Прекратите раскидывать свой вопрос по разным темам. Это нарушение Правил форума. Если Александр (Формуляр) сочтёт нужным, он ответит и в Вашей теме. А Вам замечание за дублирование[/moder]
Формуляр, помогите, пожалуйста [moder]Прекратите раскидывать свой вопрос по разным темам. Это нарушение Правил форума. Если Александр (Формуляр) сочтёт нужным, он ответит и в Вашей теме. А Вам замечание за дублирование[/moder]SvetaS
Сообщение отредактировал Pelena - Четверг, 17.09.2015, 11:27
на маленьком объёме вроде работало, но файл в 300 000 строк. Получаю ОШИБКУ - "RunTime Error 7 - Out of Memory"
Посмотрел ваши файлы. Не нашёл никаких следов использования моих макросов. Так что, ничего по поводу ошибки сказать не могу. Не понимаю, при чём тут 300 000 строк. Где справочник, где образец? Какой версией пользуетесь, с какими нстройками?
на маленьком объёме вроде работало, но файл в 300 000 строк. Получаю ОШИБКУ - "RunTime Error 7 - Out of Memory"
Посмотрел ваши файлы. Не нашёл никаких следов использования моих макросов. Так что, ничего по поводу ошибки сказать не могу. Не понимаю, при чём тут 300 000 строк. Где справочник, где образец? Какой версией пользуетесь, с какими нстройками?Формуляр