Страницы: 1
RSS
Функция для извлечения значения из массива текста
 
Доброго времени суток,
Помогите пожалуйста написать Функцию в VBA. Нужно извлечь значение из строки. Это значение всегда начинается на "Z0" или "z0" и оно всегда 8 знаков.
Пример прикреплен. Спасибо всем кто откликнется.

P.S. Я написал формулу. Формула, громоздка но с задачей справляется.
Изменено: Alex D - 17.04.2019 12:28:03
 
Может будет так достаточно
Код
=ЕСЛИОШИБКА(ПРОПИСН(ПСТР(A1;ПОИСК("Z0";A1);8));"null")
Изменено: Sanja - 17.04.2019 12:23:22
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Alex D написал:
Формула, громостка
Нет такого слова - громостка. Громоздка - так правильно.
 
А так не пойдет?
=ПСТР(A1;ПОИСК("Z0??????";A1);8)
Изменено: Максим В. - 17.04.2019 12:26:32
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
Юрий М написал: Нет такого слова...
Спасибо. Исправлено.

Цитата
Максим В. написал: А так не пойдет?
Спасибо, Ваш вариант - хорош. Если бы показали, как это выглядит как функция VBA... если можно.
Цитата
Sanja написал: Может будет так достаточно
Спасибо, большое.  
 
Цитата
Максим В. написал: А так не пойдет?
Спасибо, Ваш вариант - хорош. Если бы показали, как это выглядит как функция VBA... если можно.
Цитата
Sanja написал: Может будет так достаточно
Спасибо, большое.  
 
Цитата
Alex D написал:
Если бы показали, как это выглядит как функция VBA.
Не покажу, потому что не владею VBA. А позвольте спросить почему именно VBA нужно?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Я учусь :)
 
Alex D, успехов Вам в учёбе :)  
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
Alex D написал: Я учусь
Если для решения задачи достаточно использования НЕмногоэтажных штатных функций, то их использование предпочтительнее, чем UDF, которые, зачастую в своем коде используют WorksheetFunction
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написать Функцию в VBA
UDF
Код
Function iText(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "z0[0-9a-z]{6}"
     If .test(cell) Then
      iText = UCase(.Execute(cell)(0))
     Else
       iText = "null"
     End If
 End With
End Function
 
Спасибо Вам большое... вечер проведу с пользой.
 
Доброе время суток
Цитата
Kuzmich написал:
CreateObject("VBScript.RegExp")
Коллега, не слишком ли тяжёлый подход?
Вариант
Код
Public Function Z0Eight(ByVal fromText As String) As String
On Error GoTo errHandle
    Z0Eight = UCase$(Mid$(fromText, InStr(1, fromText, "Z0", vbTextCompare), 8))
Exit Function
errHandle:
    Z0Eight = Empty
End Function
 
По теме запроса у автора сайта хорошая статья: тут.
Как раз про то, что ув.Kuzmich написал - подробные пояснения.
Кому решение нужно - тот пример и рисует.
Страницы: 1
Наверх