Имеется прайс лист, в котором в колонке количество часто стоит: [>5] [10-50] [нет] [есть] [<10] В прайсе это колонка № 8 Требуется: макросик который после запуска убирал все кроме цифр, в значениях типа:10-50 оставлял только 50, в значениях: "есть" ставил 10, в значениях: нет, ставил 0. В общем переделывал любые показатели в столбце в циферное значение. Помогите пожалуйста с такой нужностью.
Имеется прайс лист, в котором в колонке количество часто стоит: [>5] [10-50] [нет] [есть] [<10] В прайсе это колонка № 8 Требуется: макросик который после запуска убирал все кроме цифр, в значениях типа:10-50 оставлял только 50, в значениях: "есть" ставил 10, в значениях: нет, ставил 0. В общем переделывал любые показатели в столбце в циферное значение. Помогите пожалуйста с такой нужностью.wwizard
Public Function GetNumber(ByVal this As String) As Long Static pReg As Object Dim pos As Long, pMatch As Object
pos = VBA.InStr(this, "нет", Compare:=vbTextCompare) If pos > 0 Then GetNumber = 0 Else pos = VBA.InStr(this, "есть", Compare:=vbTextCompare) If pos > 0 Then GetNumber = 10 Else If pReg Is Nothing Then Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True pReg.Pattern = "\d+" End If Set pMatch = pReg.Execute(this) If pMatch.Count > 1 Then GetNumber = CLng(pMatch(1).Value) ElseIf pMatch.Count = 1 Then GetNumber = CLng(pMatch(0).Value) End If End If End If End Function
[/vba]
Можно такой UDF-функцией [vba]
Код
Public Function GetNumber(ByVal this As String) As Long Static pReg As Object Dim pos As Long, pMatch As Object
pos = VBA.InStr(this, "нет", Compare:=vbTextCompare) If pos > 0 Then GetNumber = 0 Else pos = VBA.InStr(this, "есть", Compare:=vbTextCompare) If pos > 0 Then GetNumber = 10 Else If pReg Is Nothing Then Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True pReg.Pattern = "\d+" End If Set pMatch = pReg.Execute(this) If pMatch.Count > 1 Then GetNumber = CLng(pMatch(1).Value) ElseIf pMatch.Count = 1 Then GetNumber = CLng(pMatch(0).Value) End If End If End If End Function
Прошу менять мростить, еще надо чтобы +,++,+++ - равнялось 10, и все что -,--,--- равнялось 0 а все что +-, +/-, -/+, --+ (везде где есть хоть один +) равнялось 5
Прошу менять мростить, еще надо чтобы +,++,+++ - равнялось 10, и все что -,--,--- равнялось 0 а все что +-, +/-, -/+, --+ (везде где есть хоть один +) равнялось 5wwizard
Private Function GetRegExp() As Object Dim pReg As Object Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True: pReg.Pattern = "\d+" Set GetRegExp = pReg End Function
Public Function GetNumber2(ByVal this As String) As Long Dim pReg As Object, pos As Long, pMatch As Object GetNumber2 = 0 pos = VBA.InStr(this, "есть", Compare:=vbTextCompare) If pos > 0 Then GetNumber2 = 10 Else If pReg Is Nothing Then Set pReg = GetRegExp Set pMatch = pReg.Execute(this) If pMatch.Count = 2 Then GetNumber2 = CLng(pMatch(1).Value) ElseIf pMatch.Count = 1 Then GetNumber2 = CLng(pMatch(0).Value) Else pReg.Pattern = "\++/?-+|-+/?\++" If pReg.Test(this) Then GetNumber2 = 5 ElseIf VBA.InStr(this, "+") > 0 Then GetNumber2 = 10 End If End If End If End Function
[/vba]
Пробуйте [vba]
Код
Private Function GetRegExp() As Object Dim pReg As Object Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True: pReg.Pattern = "\d+" Set GetRegExp = pReg End Function
Public Function GetNumber2(ByVal this As String) As Long Dim pReg As Object, pos As Long, pMatch As Object GetNumber2 = 0 pos = VBA.InStr(this, "есть", Compare:=vbTextCompare) If pos > 0 Then GetNumber2 = 10 Else If pReg Is Nothing Then Set pReg = GetRegExp Set pMatch = pReg.Execute(this) If pMatch.Count = 2 Then GetNumber2 = CLng(pMatch(1).Value) ElseIf pMatch.Count = 1 Then GetNumber2 = CLng(pMatch(0).Value) Else pReg.Pattern = "\++/?-+|-+/?\++" If pReg.Test(this) Then GetNumber2 = 5 ElseIf VBA.InStr(this, "+") > 0 Then GetNumber2 = 10 End If End If End If End Function