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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск комбинации кода - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск комбинации кода (Макросы/Sub)
Поиск комбинации кода
hatter Дата: Вторник, 09.09.2014, 17:40 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

Добрый день!
Приложила файл в котором есть функция поиска в текстовой строке кода и циферного значения количества, выглядит это следующим образом: текст_код - количество шт
в таком виде функция срабатывает, но если попадается такая схема:
текст_код_текст - количество шт
то функция не срабатывает
помогите добавить в мою функцию еще одно условие, чтобы всё сработало
К сообщению приложен файл: FORMULA.xlsm (16.8 Kb)
 
Ответить
СообщениеДобрый день!
Приложила файл в котором есть функция поиска в текстовой строке кода и циферного значения количества, выглядит это следующим образом: текст_код - количество шт
в таком виде функция срабатывает, но если попадается такая схема:
текст_код_текст - количество шт
то функция не срабатывает
помогите добавить в мою функцию еще одно условие, чтобы всё сработало

Автор - hatter
Дата добавления - 09.09.2014 в 17:40
SkyPro Дата: Вторник, 09.09.2014, 17:46 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А такая регулярка не подойдет? [vba]
Код
((\d{6}|[A-Z]{2}\d{4})\-\d* )
[/vba]

Уже вижу, что не подойдет.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Вторник, 09.09.2014, 17:49
 
Ответить
СообщениеА такая регулярка не подойдет? [vba]
Код
((\d{6}|[A-Z]{2}\d{4})\-\d* )
[/vba]

Уже вижу, что не подойдет.

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

Excel 2003, 2010
выглядит это следующим образом: текст_код - количество шт
уже неправда.
после последнего артикула "шт" нету.

по доп. условию - "шт" есть всегда?

пс. а эту функцию точно я писал? Вы в ней ничего не меняли? что-то я не могу ее вспомнить...


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
выглядит это следующим образом: текст_код - количество шт
уже неправда.
после последнего артикула "шт" нету.

по доп. условию - "шт" есть всегда?

пс. а эту функцию точно я писал? Вы в ней ничего не меняли? что-то я не могу ее вспомнить...

Автор - ikki
Дата добавления - 09.09.2014 в 21:47
hatter Дата: Вторник, 09.09.2014, 21:53 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

по доп. условию - "шт" есть всегда?
в подавляющем большинстве "шт" есть

пс. а эту функцию точно я писал?

точно писали Вы, http://www.excelworld.ru/forum/10-11284-1


Сообщение отредактировал hatter - Вторник, 09.09.2014, 21:54
 
Ответить
Сообщение
по доп. условию - "шт" есть всегда?
в подавляющем большинстве "шт" есть

пс. а эту функцию точно я писал?

точно писали Вы, http://www.excelworld.ru/forum/10-11284-1

Автор - hatter
Дата добавления - 09.09.2014 в 21:53
ikki Дата: Вторник, 09.09.2014, 21:57 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
ладно... я занят пока.
через часок освобожусь - подумаю.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеладно... я занят пока.
через часок освобожусь - подумаю.

Автор - ikki
Дата добавления - 09.09.2014 в 21:57
ikki Дата: Среда, 10.09.2014, 00:00 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
ну, пусть будет так
[vba]
Код
Dim r As Object, m As Object

Function ff$(ss$)
     If r Is Nothing Then
         Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True
         r.Pattern = "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"
     End If
     Set m = r.Execute(Trim(ss) & "шт."): ff = ""
     For i = 0 To m.Count - 1
         If Len(m(i).submatches(0)) Then
             x = Split(m(i).submatches(0), ",")
             For j = 0 To UBound(x)
                 ff = ff & ", " & Trim(Split(x(j), "-")(0)) & " - " & Val(Trim(Split(x(j), "-")(1)))
             Next j
         Else
             ff = ff & ", " & m(i).submatches(1) & " - " & m(i).submatches(2)
         End If
     Next
     If Len(ff) Then ff = Mid(ff, 3)
End Function
[/vba]
не возьмусь утверждать, что нельзя использовать более простую регулярку.
но приходится учитывать случаи, когда исходная строка последовательностью артикулов не заканчивается, отдельно стоящие артикулы и, иногда, отсутствие "шт."
К сообщению приложен файл: 5666886.xlsm (18.7 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениену, пусть будет так
[vba]
Код
Dim r As Object, m As Object

Function ff$(ss$)
     If r Is Nothing Then
         Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True
         r.Pattern = "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"
     End If
     Set m = r.Execute(Trim(ss) & "шт."): ff = ""
     For i = 0 To m.Count - 1
         If Len(m(i).submatches(0)) Then
             x = Split(m(i).submatches(0), ",")
             For j = 0 To UBound(x)
                 ff = ff & ", " & Trim(Split(x(j), "-")(0)) & " - " & Val(Trim(Split(x(j), "-")(1)))
             Next j
         Else
             ff = ff & ", " & m(i).submatches(1) & " - " & m(i).submatches(2)
         End If
     Next
     If Len(ff) Then ff = Mid(ff, 3)
End Function
[/vba]
не возьмусь утверждать, что нельзя использовать более простую регулярку.
но приходится учитывать случаи, когда исходная строка последовательностью артикулов не заканчивается, отдельно стоящие артикулы и, иногда, отсутствие "шт."

Автор - ikki
Дата добавления - 10.09.2014 в 00:00
ikki Дата: Среда, 10.09.2014, 00:17 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
чччёрт!!!
не сходил по ссылке до этого - поверил на слово.
hatter, если бы я раньше увидел, что на последний ответ в теме Вам реагировать влом - ничего не стал бы делать, чессло!
ну а сейчас... пусть остаётся.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениечччёрт!!!
не сходил по ссылке до этого - поверил на слово.
hatter, если бы я раньше увидел, что на последний ответ в теме Вам реагировать влом - ничего не стал бы делать, чессло!
ну а сейчас... пусть остаётся.

Автор - ikki
Дата добавления - 10.09.2014 в 00:17
AndreTM Дата: Среда, 10.09.2014, 00:20 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ага...
Зато я для себя подумал - и настрадал похожую штучку (и код ikki не видел же до этого :) )

Там зато хорошо видно, где, что и как (и почему рекурсия, и почему именно Split... и, наверное, ТС найдет, где именно надо заменить ; и = на другие знаки).

P.S. Зато регулярка попрошше :)

иногда, отсутствие "шт."
Внутри последовательности артикулов это приводит сразу к неоднозначности, а вот если не хватает "конечного" "шт" - кто запрещает дописать эту гадость сразу в конец параметра (в начале функции F())? - ведь "лишнее" под шаблон всё равно не попадёт...
К сообщению приложен файл: 10-12897-1-1.xls (52.0 Kb) · 10-12897-1-2.xls (52.5 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 10.09.2014, 02:52
 
Ответить
СообщениеАга...
Зато я для себя подумал - и настрадал похожую штучку (и код ikki не видел же до этого :) )

Там зато хорошо видно, где, что и как (и почему рекурсия, и почему именно Split... и, наверное, ТС найдет, где именно надо заменить ; и = на другие знаки).

P.S. Зато регулярка попрошше :)

иногда, отсутствие "шт."
Внутри последовательности артикулов это приводит сразу к неоднозначности, а вот если не хватает "конечного" "шт" - кто запрещает дописать эту гадость сразу в конец параметра (в начале функции F())? - ведь "лишнее" под шаблон всё равно не попадёт...

Автор - AndreTM
Дата добавления - 10.09.2014 в 00:20
ikki Дата: Среда, 10.09.2014, 00:38 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
зато...
кабутта в регулярке нельзя найти
где именно надо заменить
:D


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
зато...
кабутта в регулярке нельзя найти
где именно надо заменить
:D

Автор - ikki
Дата добавления - 10.09.2014 в 00:38
AndreTM Дата: Среда, 10.09.2014, 03:38 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
кабутта в регулярке нельзя найти
Проверь, пожалуйста, с помощью ея фразу:
Джин-саймон арт.18005-1 шт.,арт.:GZ89-Сент-0норе,18-1шт.арт.768954 - 2


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 10.09.2014, 03:45
 
Ответить
Сообщение
кабутта в регулярке нельзя найти
Проверь, пожалуйста, с помощью ея фразу:
Джин-саймон арт.18005-1 шт.,арт.:GZ89-Сент-0норе,18-1шт.арт.768954 - 2

Автор - AndreTM
Дата добавления - 10.09.2014 в 03:38
ikki Дата: Среда, 10.09.2014, 03:51 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Андрей, не буду.
я сразу вижу - она не подпадает под шаблон ТС-а.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
СообщениеАндрей, не буду.
я сразу вижу - она не подпадает под шаблон ТС-а.

Автор - ikki
Дата добавления - 10.09.2014 в 03:51
hatter Дата: Среда, 10.09.2014, 10:54 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

Спасибо большое, очень помогли!

Если Вас не затруднит, поясните вкратце шаблон: "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"

hatter, если бы я раньше увидел, что на последний ответ в теме Вам реагировать влом - ничего не стал бы делать, чессло!

если бы можно было сразу репутацию на 100 повысить я бы это сделала, но у меня вышло только +1
 
Ответить
СообщениеСпасибо большое, очень помогли!

Если Вас не затруднит, поясните вкратце шаблон: "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"

hatter, если бы я раньше увидел, что на последний ответ в теме Вам реагировать влом - ничего не стал бы делать, чессло!

если бы можно было сразу репутацию на 100 повысить я бы это сделала, но у меня вышло только +1

Автор - hatter
Дата добавления - 10.09.2014 в 10:54
SkyPro Дата: Среда, 10.09.2014, 11:09 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[offtop]

поясните вкратце шаблон: "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"


Это пять! Плюс в репу тому, кто реально сможет "вкратце" обьяснить :)


skypro1111@gmail.com
 
Ответить
Сообщение[offtop]

поясните вкратце шаблон: "арт\.(?::((?:\s*[\w/]*\s*-\s*\d+\s*(?:шт\.,)?)+)|([^\s]*).*?-(\d+)\s?шт\.)"


Это пять! Плюс в репу тому, кто реально сможет "вкратце" обьяснить :)

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

Это пять! Плюс в репу тому, кто реально сможет "вкратце" обьяснить :)

А зачем умничать оффтопами?
"вкратце" - это значит достаточно дать определение знакам в шаблоне: ?::, \s,\d , в интернете сложно найти подобную информацию.
 
Ответить
Сообщение
Это пять! Плюс в репу тому, кто реально сможет "вкратце" обьяснить :)

А зачем умничать оффтопами?
"вкратце" - это значит достаточно дать определение знакам в шаблоне: ?::, \s,\d , в интернете сложно найти подобную информацию.

Автор - hatter
Дата добавления - 10.09.2014 в 11:44
RAN Дата: Среда, 10.09.2014, 11:53 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
интернете сложно найти подобную информацию.

Воистину!
К сообщению приложен файл: 3246899.jpg (18.0 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
интернете сложно найти подобную информацию.

Воистину!

Автор - RAN
Дата добавления - 10.09.2014 в 11:53
SkyPro Дата: Среда, 10.09.2014, 13:03 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А зачем умничать оффтопами?

Что и зачем я делаю я решаю сам и отчитываться никому не обязан. Захотел запостить оффтоп - запостил.

в интернете сложно найти подобную информацию

Вы, может, не поверите, но информации по регулярным выражениям достаточно, и даже избыточно. Главное не искать "отмазки", а искать пути.
https://www.google.com.ua/search?q=регулярные+выражения

Сервис для проверки регулярок


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 10.09.2014, 13:12
 
Ответить
Сообщение
А зачем умничать оффтопами?

Что и зачем я делаю я решаю сам и отчитываться никому не обязан. Захотел запостить оффтоп - запостил.

в интернете сложно найти подобную информацию

Вы, может, не поверите, но информации по регулярным выражениям достаточно, и даже избыточно. Главное не искать "отмазки", а искать пути.
https://www.google.com.ua/search?q=регулярные+выражения

Сервис для проверки регулярок

Автор - SkyPro
Дата добавления - 10.09.2014 в 13:03
AndreTM Дата: Среда, 10.09.2014, 14:39 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
достаточно дать определение знакам в шаблоне:

Главное не искать "отмазки", а искать пути.

И смотрим на некий источник: http://www.script-coding.com/WSH/RegExp.html
Иначе, что даст одно только "знание регулярок", без знания объектной модели и конкретного систаксиса конкретной реализации?..


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 10.09.2014, 14:42
 
Ответить
Сообщение
достаточно дать определение знакам в шаблоне:

Главное не искать "отмазки", а искать пути.

И смотрим на некий источник: http://www.script-coding.com/WSH/RegExp.html
Иначе, что даст одно только "знание регулярок", без знания объектной модели и конкретного систаксиса конкретной реализации?..

Автор - AndreTM
Дата добавления - 10.09.2014 в 14:39
ikki Дата: Среда, 10.09.2014, 20:50 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

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

поясню лишь один момент:здесь два элемента: так называемая "группировка без обратной связи" (?:шаблон) и собственно символ двоеточия, с которого должен начинаться шаблон внутри этой самой группировки.

пс. по регуляркам в русской википедии вполне неплохая статья - без зауми, но всё основное есть. один нюанс - диалект регулярок в VBA поддерживает не все из этих возможностей. но про интересующие Вас \s и \d там есть. в разделе 3.1.3 Символьные классы.


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


Сообщение отредактировал ikki - Среда, 10.09.2014, 21:17
 
Ответить
Сообщениеконечно, "в идеале", наверное, так оно и должно быть - получил на форуме помощь в виде решения плюс к этому подробное объяснение (на нужном тебе уровне) этого решения.
так что, если у кого-то так получается - это, конечно, замечательно. велкам.
но беда в том, что не каждый хороший специалист одновременно с этим является хорошим "объясняльщиком".
я - не являюсь :(
вдобавок, соглашусь с Сергеем:
Плюс в репу тому, кто реально сможет "вкратце" объяснить
"вкратце" - можно, если собеседник достаточно подготовлен и шаблон в целом ему более-менее понятен, но отдельные фрагменты вызывают вопросы.
иначе - "вкратце" не будет ниразу.
я не возьмусь.

поясню лишь один момент:здесь два элемента: так называемая "группировка без обратной связи" (?:шаблон) и собственно символ двоеточия, с которого должен начинаться шаблон внутри этой самой группировки.

пс. по регуляркам в русской википедии вполне неплохая статья - без зауми, но всё основное есть. один нюанс - диалект регулярок в VBA поддерживает не все из этих возможностей. но про интересующие Вас \s и \d там есть. в разделе 3.1.3 Символьные классы.

Автор - ikki
Дата добавления - 10.09.2014 в 20:50
hatter Дата: Четверг, 11.09.2014, 23:44 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 160
Репутация: 0 ±
Замечаний: 0% ±

здесь два элемента: так называемая "группировка без обратной связи" (?:шаблон) и собственно символ двоеточия, с которого должен начинаться шаблон внутри этой самой группировки.

пс. по регуляркам в русской википедии вполне неплохая статья - без зауми, но всё основное есть. один нюанс - диалект регулярок в VBA поддерживает не все из этих возможностей. но про интересующие Вас \s и \d там есть. в разделе 3.1.3 Символьные классы.

Спасибо, такой ответ меня устроил очень даже - теперь я хоть знаю, что это регулярные выражения
Что и зачем я делаю я решаю сам и отчитываться никому не обязан. Захотел запостить оффтоп - запостил.
ваши решения если они бесполезны, никакой функции, кроме как засорения форума не имеют, тем более в свете попытки высмеять не умеющего, но имеющего желание разобраться в теме, человека......но за ссылку и вам отдельное спасибо - так бы и сразу.
 
Ответить
Сообщение
здесь два элемента: так называемая "группировка без обратной связи" (?:шаблон) и собственно символ двоеточия, с которого должен начинаться шаблон внутри этой самой группировки.

пс. по регуляркам в русской википедии вполне неплохая статья - без зауми, но всё основное есть. один нюанс - диалект регулярок в VBA поддерживает не все из этих возможностей. но про интересующие Вас \s и \d там есть. в разделе 3.1.3 Символьные классы.

Спасибо, такой ответ меня устроил очень даже - теперь я хоть знаю, что это регулярные выражения
Что и зачем я делаю я решаю сам и отчитываться никому не обязан. Захотел запостить оффтоп - запостил.
ваши решения если они бесполезны, никакой функции, кроме как засорения форума не имеют, тем более в свете попытки высмеять не умеющего, но имеющего желание разобраться в теме, человека......но за ссылку и вам отдельное спасибо - так бы и сразу.

Автор - hatter
Дата добавления - 11.09.2014 в 23:44
ikki Дата: Пятница, 12.09.2014, 00:55 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
всё же попробуем коротенько пробежаться...


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


Сообщение отредактировал ikki - Пятница, 12.09.2014, 01:13
 
Ответить
Сообщениевсё же попробуем коротенько пробежаться...

Автор - ikki
Дата добавления - 12.09.2014 в 00:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск комбинации кода (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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