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

Вход

Регистрация

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

 

= Мир MS Excel/Получить код из текстовой строки - Мир MS Excel

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

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

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

Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?
К сообщению приложен файл: 4548297.xlsx (15.6 Kb)
 
Ответить
СообщениеДобрый день,
есть огромный файл, в каждой строке которого находится описание определенного товара. Где-то в этом описании есть код(ы) или артикул(ы) товара, который мне нужно извлечь и поместить в другую ячейку рядом стоящего столбца.

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

Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?

Автор - l-lisa
Дата добавления - 08.06.2014 в 17:14
alex1248 Дата: Воскресенье, 08.06.2014, 17:48 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?

Я бы сказал, что алгоритм не придумывается. Он лишь оформляется в виде кода, если есть однозначная зависимость.
Хотя, судя по тому, что
Единственная особенность для всех кодов- их состав: цифры и латинские буквы

, а также с учетом того, что эта особенность ни коим образом не значит, что любой набор таких символов - и есть тот самый нужный код, шансы на решение задачи малы.
Впрочем, если и есть вариант, то наверное, это вопрос не к форумчанам, а к вам, ну или к тем, кто формирует базу данных - отсутствие / наличие зависимости, сорри за тавтологию, зависит именно от них.


skype alex12481632
Qiwi +79276708519


Сообщение отредактировал alex1248 - Воскресенье, 08.06.2014, 17:51
 
Ответить
Сообщение
Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?

Я бы сказал, что алгоритм не придумывается. Он лишь оформляется в виде кода, если есть однозначная зависимость.
Хотя, судя по тому, что
Единственная особенность для всех кодов- их состав: цифры и латинские буквы

, а также с учетом того, что эта особенность ни коим образом не значит, что любой набор таких символов - и есть тот самый нужный код, шансы на решение задачи малы.
Впрочем, если и есть вариант, то наверное, это вопрос не к форумчанам, а к вам, ну или к тем, кто формирует базу данных - отсутствие / наличие зависимости, сорри за тавтологию, зависит именно от них.

Автор - alex1248
Дата добавления - 08.06.2014 в 17:48
ikki Дата: Воскресенье, 08.06.2014, 17:51 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
в первом приближении
[vba]
Код
Dim r As Object, rr As Object, m As Object

Function f$(s$)
       If r Is Nothing Then
           Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True
           r.Pattern = "(?!\s)([\da-z//\s]*\d[-\da-z//\s]*[\da-z//\s])(шт)?"
           Set rr = CreateObject("vbscript.regexp"): rr.Global = False: rr.ignorecase = True: rr.MultiLine = False
           rr.Pattern = "-?\s*\d+\s*шт$"
       End If
          
       Set m = r.Execute(s)
       If m.Count Then
           For i = 0 To m.Count - 1
               ss = Trim(m(i))
               If Right(ss, 2) = "шт" Then ss = RTrim(rr.Replace(ss, ""))
               If Len(ss) > 3 Then f = f & ", " & ss
           Next
           f = Mid(f, 3)
       End If
End Function
[/vba]
[p.s.] alex1248, сорри, не видел Ваш пост, когда размещал свой. Вы, конечно, во многом правы. Пожалуйста, не исправляйте своё сообщение.[/p.s.]
К сообщению приложен файл: re.articuls.xlsm (23.9 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 08.06.2014, 20:39
 
Ответить
Сообщениев первом приближении
[vba]
Код
Dim r As Object, rr As Object, m As Object

Function f$(s$)
       If r Is Nothing Then
           Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True
           r.Pattern = "(?!\s)([\da-z//\s]*\d[-\da-z//\s]*[\da-z//\s])(шт)?"
           Set rr = CreateObject("vbscript.regexp"): rr.Global = False: rr.ignorecase = True: rr.MultiLine = False
           rr.Pattern = "-?\s*\d+\s*шт$"
       End If
          
       Set m = r.Execute(s)
       If m.Count Then
           For i = 0 To m.Count - 1
               ss = Trim(m(i))
               If Right(ss, 2) = "шт" Then ss = RTrim(rr.Replace(ss, ""))
               If Len(ss) > 3 Then f = f & ", " & ss
           Next
           f = Mid(f, 3)
       End If
End Function
[/vba]
[p.s.] alex1248, сорри, не видел Ваш пост, когда размещал свой. Вы, конечно, во многом правы. Пожалуйста, не исправляйте своё сообщение.[/p.s.]

Автор - ikki
Дата добавления - 08.06.2014 в 17:51
l-lisa Дата: Воскресенье, 08.06.2014, 17:58 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 312
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
в первом приближении

Ничего себе, когда вы успели?? работает правильно!!!
 
Ответить
Сообщение
в первом приближении

Ничего себе, когда вы успели?? работает правильно!!!

Автор - l-lisa
Дата добавления - 08.06.2014 в 17:58
ikki Дата: Воскресенье, 08.06.2014, 18:01 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
когда вы успели?
у меня было 35 минут. ;)
проверяйте очень внимательно.
в подобных задачах ручная доработка напильником зачастую неизбежна, поэтому в результат могут быть включены "лишние" "коды".
но, имхо, лучше так, чем пропускать что-то потенциально возможное.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 08.06.2014, 18:03
 
Ответить
Сообщение
когда вы успели?
у меня было 35 минут. ;)
проверяйте очень внимательно.
в подобных задачах ручная доработка напильником зачастую неизбежна, поэтому в результат могут быть включены "лишние" "коды".
но, имхо, лучше так, чем пропускать что-то потенциально возможное.

Автор - ikki
Дата добавления - 08.06.2014 в 18:01
ikki Дата: Воскресенье, 08.06.2014, 18:15 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
например, один косячок я сам нашёл: строки 86-99, первый"код" выдается с пробелом и минусом на конце.

теоретически - можно попробовать допилить макрос (без гарантий)
практически - если таких результатов немного, лучше поправить ручками.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениенапример, один косячок я сам нашёл: строки 86-99, первый"код" выдается с пробелом и минусом на конце.

теоретически - можно попробовать допилить макрос (без гарантий)
практически - если таких результатов немного, лучше поправить ручками.

Автор - ikki
Дата добавления - 08.06.2014 в 18:15
l-lisa Дата: Воскресенье, 08.06.2014, 18:19 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 312
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
у меня было 35 минут.

Вы просто гений! Результат точный насколько это возможно для моих данных!
Погрешности есть, но от них никак не избавиться, вот к примеру: фiльтр салону 200X22X275мм-4шт возвращает 200X22X275, тут уже нужно наверное дополнительно задать условие:высота H x ширина B x длина L, но т.к. это всё равно не артикул, можно проигнорировать.
Спасибо Вам огромное! respect
 
Ответить
Сообщение
у меня было 35 минут.

Вы просто гений! Результат точный насколько это возможно для моих данных!
Погрешности есть, но от них никак не избавиться, вот к примеру: фiльтр салону 200X22X275мм-4шт возвращает 200X22X275, тут уже нужно наверное дополнительно задать условие:высота H x ширина B x длина L, но т.к. это всё равно не артикул, можно проигнорировать.
Спасибо Вам огромное! respect

Автор - l-lisa
Дата добавления - 08.06.2014 в 18:19
l-lisa Дата: Воскресенье, 08.06.2014, 18:21 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 312
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
например, один косячок я сам нашёл: строки 86-99, первый"код" выдается с пробелом и минусом на конце.

теоретически - можно попробовать допилить макрос (без гарантий)
практически - если таких результатов немного, лучше поправить ручками.

Это ничего, результатов будет много таких , но потом я эти пробелы и тире удалю заменой
 
Ответить
Сообщение
например, один косячок я сам нашёл: строки 86-99, первый"код" выдается с пробелом и минусом на конце.

теоретически - можно попробовать допилить макрос (без гарантий)
практически - если таких результатов немного, лучше поправить ручками.

Это ничего, результатов будет много таких , но потом я эти пробелы и тире удалю заменой

Автор - l-lisa
Дата добавления - 08.06.2014 в 18:21
Hugo Дата: Воскресенье, 08.06.2014, 20:20 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
А вот тут не нужно ли было rr?
[vba]
Код
Set rr = CreateObject("vbscript.regexp"): rr.Global = False: r.ignorecase = True: r.MultiLine = False
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеА вот тут не нужно ли было rr?
[vba]
Код
Set rr = CreateObject("vbscript.regexp"): rr.Global = False: r.ignorecase = True: r.MultiLine = False
[/vba]

Автор - Hugo
Дата добавления - 08.06.2014 в 20:20
ikki Дата: Воскресенье, 08.06.2014, 20:36 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
%) нужно
спасло то, что multiline для r пока не пригодился, а ignorecase просто продублировался, кроме того, он по дефолту true

исправил код в сообщении и перевложил файл
Hugo, спасибо.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 08.06.2014, 20:40
 
Ответить
Сообщение%) нужно
спасло то, что multiline для r пока не пригодился, а ignorecase просто продублировался, кроме того, он по дефолту true

исправил код в сообщении и перевложил файл
Hugo, спасибо.

Автор - ikki
Дата добавления - 08.06.2014 в 20:36
hatter Дата: Среда, 18.06.2014, 15:44 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте,
подскажите пожалуйста, почему функция из этой строки выделяет коды: 1. Запасні частини до машини для закрива ння(запечатування)картоних коробок скотчем модель"TEKOPACK TR-557" : тримач ножа № деталі TH423B-3 -10 шт, тримач стрічки № деталі TH435B-3 -10шт, пластина тримача стрічки № деталі TH434A-2- 10шт.

а из этой не выделяет: 1.Пневматичний стрiчкообв'язувальний пристрiй AQD-19 - 15шт. Пристрiй ручний пневматичний не ротацiйного типу, для обвязки ПЕТФ
причём если удалить дефис после AQD, то функция возвратит то что надо: AQD19
 
Ответить
СообщениеЗдравствуйте,
подскажите пожалуйста, почему функция из этой строки выделяет коды: 1. Запасні частини до машини для закрива ння(запечатування)картоних коробок скотчем модель"TEKOPACK TR-557" : тримач ножа № деталі TH423B-3 -10 шт, тримач стрічки № деталі TH435B-3 -10шт, пластина тримача стрічки № деталі TH434A-2- 10шт.

а из этой не выделяет: 1.Пневматичний стрiчкообв'язувальний пристрiй AQD-19 - 15шт. Пристрiй ручний пневматичний не ротацiйного типу, для обвязки ПЕТФ
причём если удалить дефис после AQD, то функция возвратит то что надо: AQD19

Автор - hatter
Дата добавления - 18.06.2014 в 15:44
ikki Дата: Среда, 18.06.2014, 16:53 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
файл приложите, посмотрим.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениефайл приложите, посмотрим.

Автор - ikki
Дата добавления - 18.06.2014 в 16:53
hatter Дата: Среда, 18.06.2014, 17:44 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

Вложила
К сообщению приложен файл: 0717788.xlsm (18.1 Kb)


Сообщение отредактировал hatter - Среда, 18.06.2014, 21:40
 
Ответить
СообщениеВложила

Автор - hatter
Дата добавления - 18.06.2014 в 17:44
Hugo Дата: Среда, 18.06.2014, 18:51 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Зачем нам пустой файл?


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЗачем нам пустой файл?

Автор - Hugo
Дата добавления - 18.06.2014 в 18:51
ikki Дата: Четверг, 19.06.2014, 04:23 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
для набора данных автора темы требовалось выбирать такие коды, в которых перед символом "-" (если он есть) обязательно есть хотя бы одна цифра

код AQD - 19 такому условию не отвечает.
можно полечить, изменив шаблон:[vba]
Код
r.Pattern = "(?!\s)([\da-z//\s]*[-\da-z//\s]*[\da-z//\s])(шт)?"
[/vba]
но мусора в результатах прибавится.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениедля набора данных автора темы требовалось выбирать такие коды, в которых перед символом "-" (если он есть) обязательно есть хотя бы одна цифра

код AQD - 19 такому условию не отвечает.
можно полечить, изменив шаблон:[vba]
Код
r.Pattern = "(?!\s)([\da-z//\s]*[-\da-z//\s]*[\da-z//\s])(шт)?"
[/vba]
но мусора в результатах прибавится.

Автор - ikki
Дата добавления - 19.06.2014 в 04:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Получить код из текстовой строки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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