Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление лишних знаков из ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Удаление лишних знаков из ячейки
wwizard Дата: Понедельник, 09.09.2013, 01:42 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Имеется прайс лист, в котором в колонке количество часто стоит: [>5] [10-50] [нет] [есть] [<10]
В прайсе это колонка № 8
Требуется: макросик который после запуска убирал все кроме цифр, в значениях типа:10-50 оставлял только 50, в значениях: "есть" ставил 10, в значениях: нет, ставил 0. В общем переделывал любые показатели в столбце в циферное значение.
Помогите пожалуйста с такой нужностью.
К сообщению приложен файл: 0503917.xlsx (21.4 Kb)
 
Ответить
СообщениеИмеется прайс лист, в котором в колонке количество часто стоит: [>5] [10-50] [нет] [есть] [<10]
В прайсе это колонка № 8
Требуется: макросик который после запуска убирал все кроме цифр, в значениях типа:10-50 оставлял только 50, в значениях: "есть" ставил 10, в значениях: нет, ставил 0. В общем переделывал любые показатели в столбце в циферное значение.
Помогите пожалуйста с такой нужностью.

Автор - wwizard
Дата добавления - 09.09.2013 в 01:42
anvg Дата: Понедельник, 09.09.2013, 05:09 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Можно такой 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
[/vba]


Сообщение отредактировал anvg - Понедельник, 09.09.2013, 05:10
 
Ответить
СообщениеМожно такой 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
[/vba]

Автор - anvg
Дата добавления - 09.09.2013 в 05:09
wwizard Дата: Понедельник, 09.09.2013, 12:51 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Прошу менять мростить, еще надо чтобы +,++,+++ - равнялось 10, и все что -,--,--- равнялось 0
а все что +-, +/-, -/+, --+ (везде где есть хоть один +) равнялось 5
 
Ответить
СообщениеПрошу менять мростить, еще надо чтобы +,++,+++ - равнялось 10, и все что -,--,--- равнялось 0
а все что +-, +/-, -/+, --+ (везде где есть хоть один +) равнялось 5

Автор - wwizard
Дата добавления - 09.09.2013 в 12:51
anvg Дата: Вторник, 10.09.2013, 02:57 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Пробуйте
[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
[/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
[/vba]

Автор - anvg
Дата добавления - 10.09.2013 в 02:57
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!