Страницы: 1
RSS
Разделить числовое значения от общей ячейки
 
Добрый день, есть макрос для создания формулы, для отделение числового значения от общей ячейки, как ее можно подкорректировать, чтобы она забирала числа только при условии что рядом стоят буквенные значения: Г; ГР; КГ; г; гр; кг., буквенный значения могут писаться как с пробелом от числа, так и без пробела.


1) Хлеб   ВИКТОРИЯ с отрубями пол нар (Россия) 200г     -   В этом случае нормально работает
2) Тесто 365 ДНЕЙ   Специальное слоеное дрожжевое (Россия) 450г     -    В этом случае забирает не нужный числовые значения (365)
Код
Function ТолькоЦифры(MyCell As Range)
Dim i As Integer
    For i = 1 To Len(MyCell)
        If IsNumeric(Mid(MyCell, i, 1)) Or Mid(MyCell, i, 1) = "," Then
            ТолькоЦифры = ТолькоЦифры + (Mid(MyCell, i, 1))
        End If
    Next
End Function
 
используйте:
Код
Function Weight(rg As Range)
  Dim re
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "[0-9, ]+(?=г|кг)": re.IgnoreCase = True
  If re.Test(rg.Value) Then Weight = re.Execute(rg.Value)(0)
End Function
Изменено: Ігор Гончаренко - 31.05.2022 09:00:52
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ввести вложенным циклом подсчет длины числа, проверку условия,  стоят ли буквы из справочника (Г; ГР; КГ; г; гр; кг.,) сразу после букв.
то есть, если у вас выполняется условие
Код
If IsNumeric(Mid(MyCell, i, 1)) Or Mid(MyCell, i, 1) = "," Then
тогда надо записывать в переменную-счетчик количество знаков, в которых это условие выполняется, после чего проверять, не стоит ли после i+количество знаков определенная буква.
У вас он просто встречает первую цифру и добавляет в значение функции  
 
Цитата
написал:
используйте:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      Function   Weight(rg   As   Range)        Dim   re        Set   re = CreateObject(  "VBScript.RegExp"  )        re.Pattern =   "[0-9, ]+(?=г|кг)"  : re.IgnoreCase =   True        If   re.Test(rg.Value)   Then   Weight = re.Execute(rg.Value)(0)    End   Function   
 
без библиотеки может не работать
 
Ігор Гончаренко, Спасибо большое
 
Ігор Гончаренко, формула не работает если в значении еще встречается буква Г, даже в начале слова

Кефир   ГАРМОНИЯ 1% бут без змж (Россия) 900г- работает только после того как удаляю букву Г в слове гармония, как быть?
 
Цитата
Виталий Вишняков написал:
как быть?
нужно чуть строже сделать шаблон))
Код
re.Pattern = "[0-9,]+ *(?=г|кг)"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Отлично работает, спасибо огромное!
Страницы: 1
Наверх