Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2012, 22:44   #11
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

А если это часть длинного кода, то как им пользоваться? просто вставить в мой код Option Explicit

Function FindDig(ByVal txt$) As Long
With CreateObject("VBScript.regexp"): .Global = True
.Pattern = "\d+(?= ?р)"
FindDig = IIf(.test(txt$), .Execute(txt$)(0), "")
End With
End Function

а потом формулу?
mariyavaryanitsa вне форума Ответить с цитированием
Старый 31.10.2012, 22:49   #12
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Так можно создать объект при первом вызове функции, а при последующих вызовах сократить количество операций до минимума:
Код:
Dim re As Object

Function FindDig(ByVal txt$) As Long
    On Error GoTo erh
    FindDig = re.Execute(txt$)(0)
    Exit Function
erh:
    If Err = 91 Then 'Object variable or With block variable not set
        Set re = CreateObject("VBScript.regexp")
        re.Global = True
        re.Pattern = "\d+(?= ?р)"
        Resume
    End If
End Function
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 31.10.2012, 22:55   #13
mariyavaryanitsa
Пользователь
 
Регистрация: 28.09.2012
Сообщений: 17
По умолчанию

обьясните мне пожалуйста как пользоваться им

Sub Макро1()

End Sub

Dim re As Object

Function FindDig(ByVal txt$) As Long
On Error GoTo erh
FindDig = re.Execute(txt$)(0)
Exit Function
erh:
If Err = 91 Then 'Object variable or With block variable not set
Set re = CreateObject("VBScript.regexp")
re.Global = True
re.Pattern = "\d+(?= ?р)"
Resume
End If
End Function

так?
mariyavaryanitsa вне форума Ответить с цитированием
Старый 31.10.2012, 22:55   #14
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Леш, а не проще if re is nothing&? И не надо длиннющего обработчика ошибок.
Код:
Dim r As Object
Function FindDig(ByVal txt$) As Long
    If r Is Nothing Then
        Set r = CreateObject("VBScript.regexp")
        rr.Pattern = "[\d,]+(?= ?р)"
    End If
    FindDig = IIf(r.test(txt$), r.Execute(txt$)(0), "")
End Function
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 31.10.2012 в 23:07.
kuklp вне форума Ответить с цитированием
Старый 31.10.2012, 23:32   #15
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от mariyavaryanitsa Посмотреть сообщение
Формулы не помогают.
Код:
=--ПСТР(A2;НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(A2;СТРОКА($1:$99);1)=" ";СТРОКА($1:$99));(ИЛИ(ЕЧИСЛО(НАЙТИ("р ";A2));ЕЧИСЛО(НАЙТИ(" р";A2)))+1)*1);ЕСЛИ(ЕОШ(НАЙТИ("рзолото";A2));ЕСЛИ(ЕОШ(НАЙТИ(" р";A2));НАЙТИ("р ";A2);НАЙТИ(" р";A2));ПОИСК("рзолото";A2))-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(A2;СТРОКА($1:$99);1)=" ";СТРОКА($1:$99));(ИЛИ(ЕЧИСЛО(НАЙТИ("р ";A2));ЕЧИСЛО(НАЙТИ(" р";A2)))+1)*1))
Формула массива (вводится нажатием Ctrl+Shift+Enter)
Вложения
Тип файла: rar mariyavaryanitsa.rar (11.1 Кб, 7 просмотров)
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 31.10.2012, 23:59   #16
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от mariyavaryanitsa Посмотреть сообщение
обьясните мне пожалуйста как пользоваться им
Это функция, которая получает строку и возвращает число (или 0, если не находит). Пользоваться, например, так:
Код:
Sub Макро1()
Dim a, b
a = FindDig("У Саши 10р")
b = FindDig("У Маши 20 р.")
MsgBox "Всего " & a + b
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.11.2012, 00:04   #17
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Леш, а не проще if re is nothing?
Серж, я как раз хотел от этого уйти! Но главное - уйти от вызова двух методов каждый раз: .test и .Execute. Это ж почти двойная работа
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из ячейки содержащей текст и число извлечь только число? АННА-ЕАО Microsoft Office Excel 35 02.12.2016 23:16
Как "выдрать" нужный текст из html странички[C#] iHikita Общие вопросы .NET 7 14.07.2010 12:50
Помогите вытянуть нужный текст из memo XazzzI Общие вопросы Delphi 11 17.06.2009 17:06
Как извлечь из двух столбцов несовпадающие строки Shavminator Microsoft Office Excel 4 28.12.2007 12:23
Как извлечь текст из буфера в строку? Brother Win Api 3 13.11.2007 20:19