Всем доброго времени суток! Начал писать пользовательскую функцию, но не хватает знаний, чтобы вытащить значения из ячейки. Необходимо вытащить : Артикулы, находящиеся в разделе "Part Number(s)" без их названий. Результат нужно записать без пробелов через восклицательный знак. Пример: R0Q46A!P13236-001!XS960SE70004 "Part Number(s)" может быть как на отдельной строке, так и в конце предыдущей. Подпункты в разделе "Part Number(s)" могут быть разные, также могут быть пустыми. Могут быть случаи, что раздела "Part Number(s) в принципе нет. По сути надо вытащить все, что после Part Number(s) и до Overview , также заменить # на !
Всем доброго времени суток! Начал писать пользовательскую функцию, но не хватает знаний, чтобы вытащить значения из ячейки. Необходимо вытащить : Артикулы, находящиеся в разделе "Part Number(s)" без их названий. Результат нужно записать без пробелов через восклицательный знак. Пример: R0Q46A!P13236-001!XS960SE70004 "Part Number(s)" может быть как на отдельной строке, так и в конце предыдущей. Подпункты в разделе "Part Number(s)" могут быть разные, также могут быть пустыми. Могут быть случаи, что раздела "Part Number(s) в принципе нет. По сути надо вытащить все, что после Part Number(s) и до Overview , также заменить # на !Oh_Nick
Можно Вас попросить описать подробно, из чего может состоять артикул, а чего в нем не может быть (длина, символы, буквы заглавные или строчные и т.п.)
Спасибо!
Написал на регулярках (я в них не сильно хорош, но все же решил опубликовать тут код): [vba]
Код
Function get_part_numbers(what As Range) As String get_part_numbers = "no" With CreateObject("VBScript.Regexp") .Global = True: .MultiLine = True: .ignorecase = False: .Pattern = "[pP]art\ [nN]umbers? ?.+$" If .test(what.Value) Then If .Execute(what)(0) = "Part Number(s)" Then get_part_numbers = .Execute(what.Value)(1) Else get_part_numbers = .Execute(what.Value)(0) End If End If End With End Function Function clear_part_numbers(what As Range) As String With CreateObject("VBScript.Regexp") .Global = True: .MultiLine = True: .ignorecase = False: .Pattern = "[pP]art\ (?:[nN]umbers?|[nN]umber\(s\))" If .test(what.Value) Then clear_part_numbers = .Replace(what.Value, ""): Exit Function End With clear_part_numbers = "no" End Function
[/vba]
Во втором столбце результат. В третьем - данные после небольшой обработки
Добрый день!
Можно Вас попросить описать подробно, из чего может состоять артикул, а чего в нем не может быть (длина, символы, буквы заглавные или строчные и т.п.)
Спасибо!
Написал на регулярках (я в них не сильно хорош, но все же решил опубликовать тут код): [vba]
Код
Function get_part_numbers(what As Range) As String get_part_numbers = "no" With CreateObject("VBScript.Regexp") .Global = True: .MultiLine = True: .ignorecase = False: .Pattern = "[pP]art\ [nN]umbers? ?.+$" If .test(what.Value) Then If .Execute(what)(0) = "Part Number(s)" Then get_part_numbers = .Execute(what.Value)(1) Else get_part_numbers = .Execute(what.Value)(0) End If End If End With End Function Function clear_part_numbers(what As Range) As String With CreateObject("VBScript.Regexp") .Global = True: .MultiLine = True: .ignorecase = False: .Pattern = "[pP]art\ (?:[nN]umbers?|[nN]umber\(s\))" If .test(what.Value) Then clear_part_numbers = .Replace(what.Value, ""): Exit Function End With clear_part_numbers = "no" End Function
[/vba]
Во втором столбце результат. В третьем - данные после небольшой обработкиjun
Строка 149, должно быть TA450DC Строка 13742, должно быть ######!######!######!######!###### Строка 13744, должно быть пусто Строка 13695, должно быть 120978-001!401026-001!401027-001
В скриншоте еще прикрепил ошибки какие выдает
jun,
Вот еще, смотрите, можно это поправить:
Строка 149, должно быть TA450DC Строка 13742, должно быть ######!######!######!######!###### Строка 13744, должно быть пусто Строка 13695, должно быть 120978-001!401026-001!401027-001
В скриншоте еще прикрепил ошибки какие выдаетOh_Nick
Можно Вас попросить уточнить, что должно получиться, например в 143 строке? Что из 2-х значений берем: Part Number(s)Part# TRS23BA-YF или Part NumberTRS23BA-YF
Спасибо!
Можно Вас попросить уточнить, что должно получиться, например в 143 строке? Что из 2-х значений берем: Part Number(s)Part# TRS23BA-YF или Part NumberTRS23BA-YF
Небольшой момент: а можно сделать проверку, что если в описании "Part Number(s)" отсутствует, то сделать, чтобы формула возвращала пустую ячейку?
jun,
Небольшой момент: а можно сделать проверку, что если в описании "Part Number(s)" отсутствует, то сделать, чтобы формула возвращала пустую ячейку?Oh_Nick