Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2015, 13:56   #1
innx
Новичок
Джуниор
 
Регистрация: 11.03.2015
Сообщений: 4
По умолчанию Поиск частичных совпадений и подстановка значения

Добрый день!
Задача такая. Есть 2 прайса, названия позиций в них несколько отличаются. Например:

Power Extreme Moisture Toner [Secret Key] | Тонер увлажняющий

и

СК Power Тонер интенсивно увлажняющий мужской Power Extreme Moisture Toner

это одно и тоже.

Нужно сделать так, чтобы иксель понимал, что это одно и тоже и подставлял третье значение (кол-во товара).

ВПР тут не работает.

Были попытки отредактировать оба файла, чтобы названия стали полностью одинаковыми, удалить все символы, чтобы остались только латинские. Но во втором случае остается первое слово, в данном примере "Power". Как вариант, может, подскажете, как удалить это дублирующее слово, тогда вопрос будет решен, обходным путем, но тоже хорошо
innx вне форума Ответить с цитированием
Старый 11.03.2015, 14:25   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

похоже, что тема сравнения прайсов разных продавцов неисчерпаема...

умом же понятно, что это одно и тоже, как этому научить программу, и желательно, чтобы на определение всех пар в двух прайсах уходило меньше суток расчетов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.03.2015, 15:09   #3
economic_man
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 35
По умолчанию

Где-то была ссылка на чудо формулу определяющую латинские буквы 65-122, как найду скину
economic_man вне форума Ответить с цитированием
Старый 11.03.2015, 15:25   #4
innx
Новичок
Джуниор
 
Регистрация: 11.03.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от economic_man Посмотреть сообщение
Где-то была ссылка на чудо формулу определяющую латинские буквы 65-122, как найду скину
есть такой

Function Del_Rus(sStr As String)
Dim li As Long
For li = 192 To 255
sStr = Replace(sStr, Chr(li), "")
Next li
sStr = Replace(sStr, Chr(168), "")
sStr = Replace(sStr, Chr(184), "")
End Function

Все хорошо, только остается вот так:
Power Power Extreme Moisture Toner

И надо удалить дубль "Power". При чем, обязательно первый (это важно для других названий).

Есть макрос

Sub bb()
Dim c As Range, x
With CreateObject("scripting.dictionary" )
For Each c In Selection
.RemoveAll
For Each x In Split(c)
.Item(x) = 0
Next
c = Join(.keys)
Next
End With
End Sub

Но он удаляет второе слово.
innx вне форума Ответить с цитированием
Старый 11.03.2015, 15:46   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

видите-ли, innx,
Вы затронули вопрос на решение которого нужно не 15-20 минут, а несколько недель, или несколько месяцев, а, может, и несколько лет
и то... будет получен не 100% результат, а некое приближение к нему, да Бог с вероятностью в 95 или более процентов...
а вероятность 95 процентов - это значит что в прайсе на 1тыс.строк, в 50 случаях макрос не найдет соответсвия между "одинаковыми" значениями или опознает разные, как одинаковые.

всем кто станет на этот путь - удачи!

а возможно, я сильно сгустил краски и сегодня к вечеру мы сможем посмотреть макрос не делающий промахов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.03.2015, 18:14   #6
innx
Новичок
Джуниор
 
Регистрация: 11.03.2015
Сообщений: 4
По умолчанию

Возможно, кому-то информация будет полезной. Вопрос решен следующим образом:

1. В таблице №1 удаляем все русские символы + плюс другие ненужные символы )\/-.,
2. В таблице №2 делаем тоже самое.

Function Del_Rus(sStr As String)
Dim li As Long
For li = 192 To 255
sStr = Replace(sStr, Chr(li), "")
Next li
sStr = Replace(sStr, Chr(168), "")
sStr = Replace(sStr, Chr(184), "")
Del_Rus = sStr
End Function

3. Во второй таблице удаляем первое слово-дубль (Power) с помощью макроса:

Sub bb()
Dim c As Range, x
With CreateObject("scripting.dictionary" )
For Each c In Selection
.RemoveAll
For Each x In Split(c)
.Item(x) = 0
Next
c = Join(.keys)
Next
End With
End Sub

4. Чистим от ненужных пробелов СЖПРОБЕЛЫ

Ну а дальше работает ВПР.
innx вне форума Ответить с цитированием
Старый 11.03.2015, 18:56   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот в 3-х разных прайсах написано:

D-Link DES-1005A
D-Link 5 Port Gigabit Switch DES-1005A
D-Link - 5-Port 10/100/1000 Switch DES-1005A

как думаете, это одно устройство?
а что скажет ВПР, после всех предварительных обработок?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.03.2015, 21:07   #8
innx
Новичок
Джуниор
 
Регистрация: 11.03.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
вот в 3-х разных прайсах написано:

D-Link DES-1005A
D-Link 5 Port Gigabit Switch DES-1005A
D-Link - 5-Port 10/100/1000 Switch DES-1005A

как думаете, это одно устройство?
а что скажет ВПР, после всех предварительных обработок?
Совершенно очевидно, что Ваш случай не имеет ничего общего с моим. К сожалению, ничем помочь не могу.
innx вне форума Ответить с цитированием
Старый 12.03.2015, 10:53   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Задача такая. Есть 2 прайса, названия позиций в них несколько отличаются.
...
Нужно сделать так, чтобы иксель понимал, что это одно и тоже и подставлял третье значение (кол-во товара).
спасибо! мне не нужна помощь. это просто был вопрос Ваши макросы понимают что это:
1. D-Link DES-1005A
2. D-Link 5 Port Gigabit Switch DES-1005A
3. D-Link - 5-Port 10/100/1000 Switch DES-1005A
одно и тоже?
то-ли задача не корректно сформулирована, то-ли макросы решают что-то совершенно другое...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в таблице произвольных строк и подстановка значения из другой Zme Microsoft Office Excel 1 07.06.2014 10:35
поиск по диапазону и подстановка значения в зависимости от результата Propinol Microsoft Office Excel 17 02.04.2012 21:35
Поиск совпадений и подстановка значений Davyd80 Microsoft Office Excel 3 29.08.2011 10:22
Поиск одинаковых и подстановка соответствующего значения ягч Microsoft Office Excel 3 23.12.2010 13:44
Поиск % совпадений и подстановка результата MVerhovcev Microsoft Office Excel 8 11.11.2010 13:43