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

Вход

Регистрация

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

 

= Мир MS Excel/Вытащить слова из ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Вытащить слова из ячейки
Oh_Nick Дата: Понедельник, 23.10.2023, 17:12 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Всем доброго времени суток!
Начал писать пользовательскую функцию, но не хватает знаний, чтобы вытащить значения из ячейки. Необходимо вытащить :
Артикулы, находящиеся в разделе "Part Number(s)" без их названий.
Результат нужно записать без пробелов через восклицательный знак.
Пример: R0Q46A!P13236-001!XS960SE70004
"Part Number(s)" может быть как на отдельной строке, так и в конце предыдущей.
Подпункты в разделе "Part Number(s)" могут быть разные, также могут быть пустыми. Могут быть случаи, что раздела "Part Number(s) в принципе нет. По сути надо вытащить все, что после Part Number(s) и до Overview , также заменить # на !
К сообщению приложен файл: HP.xlsm (126.5 Kb)
 
Ответить
СообщениеВсем доброго времени суток!
Начал писать пользовательскую функцию, но не хватает знаний, чтобы вытащить значения из ячейки. Необходимо вытащить :
Артикулы, находящиеся в разделе "Part Number(s)" без их названий.
Результат нужно записать без пробелов через восклицательный знак.
Пример: R0Q46A!P13236-001!XS960SE70004
"Part Number(s)" может быть как на отдельной строке, так и в конце предыдущей.
Подпункты в разделе "Part Number(s)" могут быть разные, также могут быть пустыми. Могут быть случаи, что раздела "Part Number(s) в принципе нет. По сути надо вытащить все, что после Part Number(s) и до Overview , также заменить # на !

Автор - Oh_Nick
Дата добавления - 23.10.2023 в 17:12
jun Дата: Понедельник, 23.10.2023, 17:21 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Добрый день!

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

Спасибо!

Написал на регулярках (я в них не сильно хорош, но все же решил опубликовать тут код):
[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]

Во втором столбце результат. В третьем - данные после небольшой обработки
К сообщению приложен файл: part_numbers.xlsb (219.2 Kb)


Сообщение отредактировал jun - Понедельник, 23.10.2023, 18:05
 
Ответить
СообщениеДобрый день!

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

Спасибо!

Написал на регулярках (я в них не сильно хорош, но все же решил опубликовать тут код):
[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
Дата добавления - 23.10.2023 в 17:21
Oh_Nick Дата: Понедельник, 23.10.2023, 18:22 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun,

Смотрите, по сути из ячейки мы должны вытащить все что после Part Number(s) и до Overview, например ячейка D7 мы вытаскиваем :

Option Part# 734526-B21
SmartBuy Part# 734526-S21
Spare Part# 734567-001
Assembly Part# 731041-002
Model# XK0960GDQPK

И преобразуем в такой вид: 734526-B21!734526-S21!734567-001!731041-002!XK0960GDQPK (разделяем значения знаком !)
 
Ответить
Сообщениеjun,

Смотрите, по сути из ячейки мы должны вытащить все что после Part Number(s) и до Overview, например ячейка D7 мы вытаскиваем :

Option Part# 734526-B21
SmartBuy Part# 734526-S21
Spare Part# 734567-001
Assembly Part# 731041-002
Model# XK0960GDQPK

И преобразуем в такой вид: 734526-B21!734526-S21!734567-001!731041-002!XK0960GDQPK (разделяем значения знаком !)

Автор - Oh_Nick
Дата добавления - 23.10.2023 в 18:22
Oh_Nick Дата: Понедельник, 23.10.2023, 19:26 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Oh_Nick,

Вот формулой можно вывести
Код
=ПСТР(B21;НАЙТИ("Part Number(s)";B21)+ДЛСТР("Part Number(s)");НАЙТИ("Overview";B21)-НАЙТИ("Part Number(s)";B21)-ДЛСТР("Part Number(s)"))


Осталось только эти значения привести в тот вид с воскл знаком.
 
Ответить
СообщениеOh_Nick,

Вот формулой можно вывести
Код
=ПСТР(B21;НАЙТИ("Part Number(s)";B21)+ДЛСТР("Part Number(s)");НАЙТИ("Overview";B21)-НАЙТИ("Part Number(s)";B21)-ДЛСТР("Part Number(s)"))


Осталось только эти значения привести в тот вид с воскл знаком.

Автор - Oh_Nick
Дата добавления - 23.10.2023 в 19:26
jun Дата: Понедельник, 23.10.2023, 19:51 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Подправил код, тестируйте.
Правда не на всех строках отрабатывает корректно.
Может кто из более опытных товарищей предложит что-то еще.
К сообщению приложен файл: part_number_v1.xlsb (220.9 Kb)


Сообщение отредактировал jun - Вторник, 24.10.2023, 09:03
 
Ответить
СообщениеПодправил код, тестируйте.
Правда не на всех строках отрабатывает корректно.
Может кто из более опытных товарищей предложит что-то еще.

Автор - jun
Дата добавления - 23.10.2023 в 19:51
Oh_Nick Дата: Понедельник, 23.10.2023, 19:58 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun, вообще рабочая штукенция, спасибо!

Конечно если еще будут мысли - пишите!)
 
Ответить
Сообщениеjun, вообще рабочая штукенция, спасибо!

Конечно если еще будут мысли - пишите!)

Автор - Oh_Nick
Дата добавления - 23.10.2023 в 19:58
jun Дата: Вторник, 24.10.2023, 09:05 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Oh_Nick, спасибо!
формулой можно вывести

В формулах, к сожалению, не силен, увы.
Обновил файл в 5 сообщении (забыл Value добавить) и сделал функцию волатильной.
если еще будут мысли - пишите!

Хорошо.
Может еще кто-нибудь откликнется. :)
 
Ответить
СообщениеOh_Nick, спасибо!
формулой можно вывести

В формулах, к сожалению, не силен, увы.
Обновил файл в 5 сообщении (забыл Value добавить) и сделал функцию волатильной.
если еще будут мысли - пишите!

Хорошо.
Может еще кто-нибудь откликнется. :)

Автор - jun
Дата добавления - 24.10.2023 в 09:05
Oh_Nick Дата: Вторник, 24.10.2023, 10:15 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun,
а можно сделать так, чтобы первое значение без восклицательного шло?
 
Ответить
Сообщениеjun,
а можно сделать так, чтобы первое значение без восклицательного шло?

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 10:15
Oh_Nick Дата: Вторник, 24.10.2023, 10:53 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun,

Вот еще, смотрите, можно это поправить:

Строка 149, должно быть TA450DC
Строка 13742, должно быть ######!######!######!######!######
Строка 13744, должно быть пусто
Строка 13695, должно быть 120978-001!401026-001!401027-001

В скриншоте еще прикрепил ошибки какие выдает
К сообщению приложен файл: 7338729.jpg (153.8 Kb)


Сообщение отредактировал Oh_Nick - Вторник, 24.10.2023, 10:56
 
Ответить
Сообщениеjun,

Вот еще, смотрите, можно это поправить:

Строка 149, должно быть TA450DC
Строка 13742, должно быть ######!######!######!######!######
Строка 13744, должно быть пусто
Строка 13695, должно быть 120978-001!401026-001!401027-001

В скриншоте еще прикрепил ошибки какие выдает

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 10:53
ktpnz Дата: Вторник, 24.10.2023, 11:00 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 1 ±
Замечаний: 0% ±

Добрый день!
Можно так попробовать: [vba]
Код
=ЗАМЕНИТЬ(get_part_numbers(C2);1;1;"")
[/vba]
и протащить вниз.


Сообщение отредактировал ktpnz - Вторник, 24.10.2023, 11:04
 
Ответить
СообщениеДобрый день!
Можно так попробовать: [vba]
Код
=ЗАМЕНИТЬ(get_part_numbers(C2);1;1;"")
[/vba]
и протащить вниз.

Автор - ktpnz
Дата добавления - 24.10.2023 в 11:00
Oh_Nick Дата: Вторник, 24.10.2023, 11:03 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
ktpnz, можно, но это конечно костыль) если бы можно было, то хотелось бы в коде выше это реализовать...
 
Ответить
Сообщениеktpnz, можно, но это конечно костыль) если бы можно было, то хотелось бы в коде выше это реализовать...

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 11:03
jun Дата: Вторник, 24.10.2023, 11:15 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

первое значение без восклицательного шло

Подправил (см. файл во вложении)
можно это поправить

У меня строки только до 638. Мой макрос подразумевает, что некоторые строки нужно править в ручную.
К сообщению приложен файл: 2023642.xlsb (221.1 Kb)
 
Ответить
Сообщение
первое значение без восклицательного шло

Подправил (см. файл во вложении)
можно это поправить

У меня строки только до 638. Мой макрос подразумевает, что некоторые строки нужно править в ручную.

Автор - jun
Дата добавления - 24.10.2023 в 11:15
Oh_Nick Дата: Вторник, 24.10.2023, 11:28 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun,
Вот , прикрепил (строки 129,143,149,168,177,202,277,315). Такие ошибки можно избежать?
К сообщению приложен файл: 4382017.xlsb (404.3 Kb)
 
Ответить
Сообщениеjun,
Вот , прикрепил (строки 129,143,149,168,177,202,277,315). Такие ошибки можно избежать?

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 11:28
jun Дата: Вторник, 24.10.2023, 11:38 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Можно Вас попросить уточнить, что должно получиться, например в 143 строке?
Что из 2-х значений берем:
Part Number(s)Part# TRS23BA-YF
или
Part NumberTRS23BA-YF

Спасибо!
 
Ответить
СообщениеМожно Вас попросить уточнить, что должно получиться, например в 143 строке?
Что из 2-х значений берем:
Part Number(s)Part# TRS23BA-YF
или
Part NumberTRS23BA-YF

Спасибо!

Автор - jun
Дата добавления - 24.10.2023 в 11:38
Oh_Nick Дата: Вторник, 24.10.2023, 11:42 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun, вот это должны вытащить TRS23BA-YF
 
Ответить
Сообщениеjun, вот это должны вытащить TRS23BA-YF

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 11:42
jun Дата: Вторник, 24.10.2023, 11:57 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Спасибо!
Наверное придется вытаскивать эти артикулы руками. Сейчас попробовал - остальное поехало.
Может кто из более опытных товарищей подскажет.


Сообщение отредактировал jun - Вторник, 24.10.2023, 13:14
 
Ответить
СообщениеСпасибо!
Наверное придется вытаскивать эти артикулы руками. Сейчас попробовал - остальное поехало.
Может кто из более опытных товарищей подскажет.

Автор - jun
Дата добавления - 24.10.2023 в 11:57
Oh_Nick Дата: Вторник, 24.10.2023, 12:42 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun, вам спасибо большое за проделанную работу!
 
Ответить
Сообщениеjun, вам спасибо большое за проделанную работу!

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 12:42
jun Дата: Вторник, 24.10.2023, 13:15 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

Oh_Nick, пожалуйста!
Успехов Вам и всего наилучшего! :)
 
Ответить
СообщениеOh_Nick, пожалуйста!
Успехов Вам и всего наилучшего! :)

Автор - jun
Дата добавления - 24.10.2023 в 13:15
Oh_Nick Дата: Вторник, 24.10.2023, 15:19 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
jun,

Небольшой момент: а можно сделать проверку, что если в описании "Part Number(s)" отсутствует, то сделать, чтобы формула возвращала пустую ячейку?
 
Ответить
Сообщениеjun,

Небольшой момент: а можно сделать проверку, что если в описании "Part Number(s)" отсутствует, то сделать, чтобы формула возвращала пустую ячейку?

Автор - Oh_Nick
Дата добавления - 24.10.2023 в 15:19
jun Дата: Вторник, 24.10.2023, 15:33 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 43 ±
Замечаний: 0% ±

См. файл
Если нет имени Part Number и Overview, то пусто
К сообщению приложен файл: part_number_v2.xlsb (404.0 Kb)


Сообщение отредактировал jun - Вторник, 24.10.2023, 15:37
 
Ответить
СообщениеСм. файл
Если нет имени Part Number и Overview, то пусто

Автор - jun
Дата добавления - 24.10.2023 в 15:33
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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