Страницы: 1
RSS
Извлечь вес из ячейки, извлечь цифры рядом с г или кг в каждой ячейке столбца
 
Доброго время суток форумчане!
Два дня ковыряю проблему, есть диапазон данных, содержащих наименование, необходимо извлечь из них данные о весе и вынести в отдельный столбец
Помогите! в примере есть решение, которое я нашел для похожей задачи на форуме, решение с помощью формулы массива, однако не могу додумать чтобы оно работало корректно

Прикрепляю пример, с выдержкой наименований, отражающих проблему!
 
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(A2;ПОИСК(" ";A2;ПРОСМОТР(999;ПОИСК({"кг ";"г "};A2&" "))-6);6);"кг";"");"г";""))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир! Большое спасибо! ОГРОМНОЕ!
 
=--ПОДСТАВИТЬ(ПОДСТАВИТЬ(0&ПСТР(ПСТР(A1;ПОИСК("(";A1&"(")-6;6);ПОИСК(" ";ПСТР(A1;ПОИСК("(";A1&"(")-6;6)&" ")+1;5);"к";);"г";)
Вопрос: кому нужны такие данные, где граммы и килограммы смешаны в одну кучу?
 
 добрый день,вариант функции в столбце B,файл use

 
Код
Function uuu(t$)
 With CreateObject("VBScript.RegExp"): .Pattern = "\d+(?=кг|г)"
    If .test(t) Then uuu = .Execute(t)(0) Else uuu = ""
 End With
End Function
Изменено: sv2013 - 15.09.2016 05:58:47
 
Доброго утра, уважаемые форумчане! sv2013, не додумался сам до такого простого шаблона)))) зато дождался вас - спасибо за вариант!  :idea:
temaNEW, поэкспериментировал с шаблоном от sv2013, и универсальной UDF от местных мастеров - полученная функция извлекает все числа (в том числе десятичные с разделителем ","), после которых (с пробелом или без него) идёт "г" или "кг". Полученные значения сцепляет через "; " В оригинальной UDF (ссылка в коде макроса) есть возможность выбора шаблона поиска (строка №15 в данном коде) и разделителя для сцепки найденных значений (строка №21 в данном коде)  ;)
Код
'Извлечение с помощью регулярных выражений (частный случай)
'Использован код автора: Kuzmich
'Авторы рабочих версий UDF: Андрей VG, Hugo
'Тема на форуме (оригинал UDF): http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=77124&TITLE_SEO=77124-vopros-po-regulyarnym-vyrazheniyam-v-stroke-nayti-zamenit&MID=647893#message647893
'===============================================================================================================================================================================================================
Public Function ВзятьРегуляркамиВес$(Str$)
      
    Dim p As Object, sOut As String
    sOut = ""
    
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = False
        .MultiLine = False
        .Pattern = "\d+(,\d+)*?(?=кг|г| кг| г)"
   
        For Each p In .Execute(Str)
            If Len(sOut) = 0 Then
                sOut = p.Value
            Else
                sOut = sOut & "; " & p.Value
            End If
            
        Next
        
    End With
    
    ВзятьРегуляркамиВес = sOut
    
End Function
Изменено: Jack Famous - 15.09.2016 09:50:48
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Читают тему
Наверх