Страницы: 1
RSS
Удаление по маске
 
Добрый день!  
подскажите как можно сделать с помощью формул так , чтоб в строке удалялись значения по маске,  
допустим строка: (45645) раср (вапва) 089  
маска (в моем случае): (*)  
вывод: раср 089  
 
строки бывают разной длинны, с разными кол.во совпадении по маске
 
Здравствуйте!  
Простите великодушно, а Ctrl+F чем не устраивает?  
Почему обязательно "сделать с помощью формул"?
 
потому что не везде надо заменить, это значение будет меняться только в одной ячейки (а значение это будет считывать с других ячеек), поэтому требуется формула и как сделать с стандартными формула я не знаю, так как мне кажется требуется цикличность
 
а пользовательская функция? не устроит?
 
устроит конечно, ну чтоб только работала при {quote}{login=чайник_VBA}{date=30.03.2011 09:12}{thema=Удаление по маске}{post}  
строки бывают разной длинны, с разными кол.во совпадении по маске{/post}{/quote}
 
понятно.  
формулисты здесь на форуме творят чудеса при помощи стандартных формул Excel'я.  
если же (вдруг) они вам не смогут помочь, то вариант с UDF сделаю вечером.  
сейчас некогда просто :(
 
Смотрел по инету нашел формулу не помню для чего  
 
Function Удпомаске(srcStr As String) As String  
Dim objRegEx As Object  
Set objRegEx = CreateObject("VBScript.RegExp")  
   With objRegEx  
       .Global = True  
       .Pattern = "\S"  
       NumbersOnly = .Replace(srcStr, vbNullString)  
   End With  
Set objRegEx = Nothing  
End Function  
 
помогите,  
мне кажется надо правильно подобрать .Pattern, может еще чего изменить....
 
если UDF подходит, то можно как-то так:  
Function test(st As String, mk As String)  
   Dim rn, rk  
   While st Like "*" & mk & "*"  
       For rn = 1 To Len(st)  
           For rk = 1 To Len(st) - rn + 1  
               If Mid(st, rn, rk) Like mk & "*" Then Exit For  
           Next rk  
           If Mid(st, rn, rk) Like mk & "*" Then st = Replace(st, Mid(st, rn, rk), "")  
       Next rn  
   Wend  
   test = st  
End Function
 
Спасибо большое! всё отлично работает!
 
{quote}{login=webley}{date=30.03.2011 10:29}{thema=}{post}если UDF подходит, то можно как-то так:  
Function test(st As String, mk As String)  
   Dim rn, rk  
   While st Like "*" & mk & "*"  
       For rn = 1 To Len(st)  
           For rk = 1 To Len(st) - rn + 1  
               If Mid(st, rn, rk) Like mk & "*" Then Exit For  
           Next rk  
           If Mid(st, rn, rk) Like mk & "*" Then st = Replace(st, Mid(st, rn, rk), "")  
       Next rn  
   Wend  
   test = st  
End Function{/post}{/quote}  
 
хороший вариант  
но... иногда работает неверно, а иногда - вообще зависает в бесконечном цикле
 
ну можно немного и усложнить:  
Function webley(st As String, mk As String)  
' http://www.planetaexcel.ru/forum.php?thread_id=26150  
   Dim rn, rk  
   While st Like "*" & mk & "*"  
       If st Like mk Then  
           webley = ""  
           Exit Function  
       End If  
       For rn = 1 To Len(st)  
           For rk = 1 To Len(st) - rn + 1  
               If Mid(st, rn, rk) Like mk & "*" Then Exit For  
           Next rk  
           If Mid(st, rn, Len(st)) Like mk Then  
               st = Left(st, rn - 1)  
           ElseIf Mid(st, rn, rk) Like mk & "*" Then  
               st = Replace(st, Mid(st, rn, rk), "")  
           End If  
       Next rn  
   Wend  
   webley = st  
End Function
Страницы: 1
Читают тему
Наверх