Страницы: Пред. 1 2
RSS
Как из текста в ячейке найти информацию по заданной маске?
 
Спасибо!
Я поправил UDF в 2х местах.
Теперь она выглядит так:
Код
Function iSumma(cell As String) As Double
Dim mo As Object
Dim n As Integer
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
  If InStr(1, cell, " 1000 ШТ") Then
     .Pattern = "\d+,?\d?\d?\d?(?= 1000 ШТ)"
     If .test(cell) Then
       Set mo = .Execute(cell)
       For n = 0 To mo.Count - 1
         iSumma = iSumma + mo.Item(n) * 1000
       Next
     Else
       iSumma = 0
     End If
  Else
       .Pattern = "\d+,?\d?\d?\d?(?= 1000 ШТ)"
     If .test(cell) Then
       Set mo = .Execute(cell)
       For n = 0 To mo.Count - 1
         iSumma = iSumma + mo.Item(n)
       Next
     Else
       iSumma = 0
     End If
  End If
 End With
End Function

Но некоторые строки все равно не считает (выделил жёлтым в Пример6).
Изменено: danil77 - 27.06.2017 18:20:15 (Оформил код)
 
Цитата
поправил UDF в 2х местах
Не совсем так
Код
Function iSumma(cell As String) As Double
Dim mo As Object
Dim n As Integer
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
  If InStr(1, cell, " 1000 ШТ") Then
     .Pattern = "\d+,?\d?\d?\d?(?= 1000 ШТ)"
     If .test(cell) Then
       Set mo = .Execute(cell)
       For n = 0 To mo.Count - 1
         iSumma = iSumma + mo.Item(n) * 1000
       Next
     Else
       iSumma = 0
     End If
  Else
       .Pattern = "\d+(,| )\d* ?(?=ШТ)"
     If .test(cell) Then
       Set mo = .Execute(cell)
       For n = 0 To mo.Count - 1
         iSumma = iSumma + mo.Item(n)
       Next
     Else
       iSumma = 0
     End If
  End If
 End With
End Function
 
Спасибо Вам в очередной раз!!!
Еще бы сцепляло числа разделенные пробелом корректно было бы вообще супер! Когда целое и дробное то не сцепляет:
См. Пример6 строка 5:
137 400,00 ШТУК
UDF выдаёт =400 вместо =137400

upd: Если сложно то я буду вручную находить эти ячейки. Уже практически идеально!
Изменено: danil77 - 27.06.2017 20:58:52
 
Код
       .Pattern = "\d* ?\d+(,| )\d* ?(?=ШТ)"
 
Спасибо, Добрый человек!
 
Блин, если между цифрой и "ШТ" нет пробела, то формула не видит число... (строчка 2 Пример 7)
 
Цитата
      .Pattern = "\d* ?\d*(,| )\d* ?(?=ШТ)"
а так?
 
СПАСИБО!!!
 
Подскажите, пожалуйста, как сделать новый UDF? Теперь нужно суммировать все цифры в ячейке после слова "Кол-во". Если сумма в ячейке дробное число, то нужно еще умножить на 1000. Если целое число - то умножать не надо. Постараюсь в будущем сам справляться с этим...
 
У меня получились несколько другие цифры
Код
Function iSumma(cell As String) As Double
Dim mo As Object
Dim n As Integer
Dim flag As Boolean
 With CreateObject("VBScript.RegExp")
      .Global = True
      .IgnoreCase = True
      .MultiLine = True
      .Pattern = "(Кол-во - )\d*(,| |)\d*"
     If .test(cell) Then
       Set mo = .Execute(cell)
         flag = False
       For n = 0 To mo.Count - 1
         If InStr(1, mo.Item(n), ",") Then flag = True: Exit For
       Next
       If flag Then
         For n = 0 To mo.Count - 1
           iSumma = iSumma + Split(mo.Item(n), "- ")(1) * 1000
         Next
       Else
         For n = 0 To mo.Count - 1
           iSumma = iSumma + Split(mo.Item(n), "- ")(1)
         Next
       End If
  End If
 End With
End Function
 
Спасибо Вам большое!!!!! Вы прямо спаситель мой!
Теперь я на будущее смогу, наверное, сам подкручивать механизм. Ведь у меня теперь есть вариант, когда маркер стоит перед цифрой (случай с "кол-во") и когда маркер после цифры (случай с "шт").
 
Замечание обоим: вопрос не по теме.
Страницы: Пред. 1 2
Наверх