Страницы: 1
RSS
Выбор разных данных из текста в ячейке
 
Добрый день!
У меня есть к вам просьба:
1. Необходимо по каждой строчке сравнить и выбрать правильное название улицы, которое некорректно написано из "столбца А" из имеющегося списка улиц "столбец D" и вставить правильное значение в соответствующую ячейку в "столбец Е"
2. Также возможно ли, используя различные формулы, извлечь текстовую информацию из значений "столбца B" и вставить ее в соответствующие ячейки столбцов F, G, H, I
Так в ячейках есть запись типа 35/19/7 кв.м., эти цифры каждый раз разные и их нужно разнести по разным столбцам. Также из этой же ячейки нужно выбрать материал стен (пан. кирп, монолит) и вставить эту часть в соответствующую ячейку столбца F.

Возможно ли вообще решение по автоматизации этого вопроса, а то 3000 строк перебирать по многим параметрам достаточно трудоемкий процесс.

Сергей
 
Цитата
У меня есть к вам просьба:
1...
2...
Комплексные хотелки на заказ - http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=list&FID=7 ... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Извините, не знал, поэтому и описал свою задачу здесь.
 
chsherbakov, размещение вопроса по указанной ссылке подразумевает оплату работу. Возможен вариант, когда и здесь (бесплатно) Вам помогут, но придётся подождать, пока кого-то не заинтересует данная задача))
 
имхо
основные напряги - с п.1.
не оч.понятно (а точнее - по имеющемуся фрагменту сложно определить), в чём именно может заключаться "некорректность" адресов...
по п.2 - наверное, можно и формулами, но регулярками проще. хотя, опять же, будут нюансы - и даже в приведенном примере они уже есть - в яч. B44 потенциально нужная часть текста выглядит так: "...32/18 6 кв.м.", а не так, как описывает ТС.
думаю, это только цветочки...

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


.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо, за информацию, добавлю вопрос в соответствующий раздел.
 
Доброе время суток.
Для реализации 1 нужен более полный список "правильных" улиц (тестировать не на чем)
По 2, проверяйте
 
Добрый день, список улиц в файле.

К сожалению, при нажатии на кнопку выходит сообщение об ошибке макроса.
 
>  chsherbakov: выходит сообщение об ошибке макроса
В коде замените CDbl на Val в 3-х строчках.
 
А с п.1 хорошо справляется надстройка Fuzzy Lookup, нужно только диапазоны преобразовать в таблицы по Ctrl-L
 
Цитата
В коде замените CDbl на Val в 3-х строчках
Владимир, я думаю, что дело не в этом. Я же специально там меняю запятую на точку, чтобы VBA.CDbl отрабатывал правильно, вне зависимости от языковых настроек. Где то в другом месте. Надеюсь, ТС сообщит место в коде, где возникает ошибка и приведёт текст ошибки.
За надстройку Fuzzy Lookup - спасибо. Алгоритм работы бы ещё узнать...
 
Спасибо огомаднейшее!!!
 
> anvg: я думаю, что дело не в этом

Андрей, в русской версии операционки запятая используется в качестве разделителя целой и дробной части.
И CDbl() всегда использует именно этот символ разделителя, независимо от настроек Excel. Поэтому для русской операционной системы Cdbl() выдаст ошибку, если в качестве этого разделителя использована точка.
Но Val()  всегда работает только с символом точки в качестве такого разделителя, независимо от локализации операционки и Excel.

Кое-что про старую версию этой надстройки можно прочитать здесь:
http://blog.contextures.com/archives/2011/05/06/fuzzy-lookup-add-in-for-excel-2010/
С тех пор надстройка была обновлена и улучшена.

Алгоритм работы достаточно простой и быстрый, но оказался эффективным.
Описание алгоритма есть в "Fuzzy Lookup Add-In for Excel.pdf" но там полмегабайта.
Не помню уже, откуда у меня этот документ. Могу выслать почтой.
Алгоритм называется Weighted Jaccard Similarity, его описание можно найти и по поисковику по этому названию.
Изменено: ZVI - 15.11.2013 10:34:55
 
Цитата
Поэтому для русской операционной системы Cdbl() выдаст ошибку, если в качестве этого разделителя использована точка.
Да нет, специально поставил: запятая - десятичный разделитель и в Immediate выполнил

Код
?cdbl("123,456")
 123,456 
?cdbl("123.456")
 123.456 
 123,456  
И с точкой и запятой отработал без ошибок. Но, вернувшись на десятичный разделитель - точка, получил ошибку для первого варианта ("123,456"). Excel 2010 32bit (да и на других раньше так же было).
Цитата
Могу выслать почтой.
Да, если не сложно, то заранее большое спасибо! Одно дело готовая удочка, лучше самому сделать :D  В поиске посмотрю тоже, спасибо за название алгоритма.
 
В русской операционке ?cdbl( "123.456" ) выдает ошибку в версиях Excel 2003/2007/2010.
Знак разделителя операционки можно получить так: ?Mid(1/2,2,1)
Только Val работает всегда с точкой, это 100%  :)  

Напишите мне письмо, чтобы ответить с PDF, а то интерфейс форума не позволяет отправлять письмо с вложением.
Изменено: ZVI - 15.11.2013 11:05:23
 
Проверил - на английской требует точку, запятую игнорирует.


Код
Sub test()
    Dim x, y
    x = "10.25"
    y = CDbl(x)
    MsgBox x & " = " & y
    x = "10,25"
    y = CDbl(x)
    MsgBox x & " = " & y
End Sub

 
 
Андрей, приложил скриншот с русскими региональными установками операционной системы, где видно, что в качестве разделителя целой и дробной части используется запятая. Можете поставить запятую в таких настройках своего компьютера чтобы увидеть ошибку Cdbl при работе с точкой. И разделитель групп разрядов замените с запятой на пробел
Изменено: ZVI - 15.11.2013 11:22:43
 
> Hugo: Проверил - на английской требует точку, запятую игнорирует.

Игорь, в английском варианте запятая - разделитель групп разрядов, поэтому он игнорируется.
В русской операционке в качестве такого разделителя используется пробел
Страницы: 1
Читают тему
Наверх