Страницы: 1
RSS
Как оставить только 11-значные числа в ячейках?
 
В ячейках имеется текст, и два типа чисел (5-ти и 11-значные). Помогите пожалуйста, как оставить только 11-значные числа. С помощью макроса, формулы, сортировки?
 
С помощью примера в Вашем файле.
 
Извините, не понял. С помощью какого "примера"?
 
Уточню, 11-значные числа это номера мобильных телефонов, т.е. первые 2 цифры всегда "89"
 
>99999...
 
Выкладываю
 
Просто номер, без "мобильный телефон"
 
Буквально недавно уже подобное решалось:  
http://www.planetaexcel.ru/forum.php?thread_id=46093  
 
Единственно чуть-чуть доработал формулу господина vikttur-а  
"=МАКС(ЕСЛИ(ЕЧИСЛО(-ПСТР(ПОДСТАВИТЬ(A1;"-";"");СТРОКА($1:$99);11));--ПСТР(ПОДСТАВИТЬ(A1;"-";"");СТРОКА($1:$99);11)))"  
Это ФОРМУЛА МАССИВА  
________________________  
khafizovtt@gmail.com
Учимся сами и помогаем другим...
 
Всем большое спасибо, работает)
 
Или макрсом  
Public Sub DelRow11()  
   Dim LRow As Long, i As Long  
   Dim pRegExp As Object, iStr As Long  
   Dim is11 As Boolean, vStr As Variant  
   Dim pSheet As Worksheet, subStr() As String  
   Set pSheet = ThisWorkbook.ActiveSheet  
   LRow = pSheet.Cells(pSheet.Rows.Count, 1).End(xlUp).Row  
   Set pRegExp = CreateObject("VBScript.RegExp")  
   pRegExp.Global = True: pRegExp.Pattern = "[^0-9]"
   For i = LRow To pSheet.UsedRange.Row Step -1  
       vStr = pSheet.Cells(i, 1).Value  
       If Application.WorksheetFunction.IsText(vStr) Then  
           subStr = Split(vStr): is11 = False  
           For iStr = 0 To UBound(subStr)  
               vStr = pRegExp.Replace(subStr(iStr), "")  
               If Len(vStr) = 11 Then is11 = True: pSheet.Cells(i, 1).Value = vStr: Exit For  
           Next iStr  
           If Not is11 Then pSheet.Rows(i).Delete  
       End If  
   Next i  
End Sub
 
=ПСТР(A1;МИН(ПОИСК({"89";"8-9"};A1&"898-9"));ПОИСК(" ";A1&" ";МИН(ПОИСК({"89";"8-9"};A1&"898-9")))-МИН(ПОИСК({"89";"8-9"};A1&"898-9")))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Function NumberMob$(rng As Range)  
   Dim spl, i&  
   spl = Split(Replace(rng.Value, "-", Empty))  
   For i = 0 To UBound(spl)  
       If Left(spl(i), 2) = 89 And Len(spl(i)) >= 11 Then NumberMob = spl(i)  
   Next  
End Function
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Вариант - см. файл.  
 
[Файл в сообщении 08.10.2012, 22:00. Поправка автора]
[МОДЕРАТОРЫ]
 
ber$erk, при отсутствии мобильного формула ошибается.  
 
Не обязательно формула массива. Эта и найдет мобильный, и при отсутствии мобильного покажет пустую ячейку:  
=ПСТР(ПОДСТАВИТЬ(A1;"-";);ПОИСК("Моб";ПОДСТАВИТЬ(A1;"-";)&"Моб")+19;11)
 
Function MN$(text As String)  
   With CreateObject("vbscript.regexp")  
       .Pattern = "[\(\)-]": .Global = True
       text = .Replace(text, "")  
       .Pattern = "\b\d{11}\b"  
       If .test(text) Then  
           MN = .Execute(text)(0)  
       Else  
           MN = ""  
       End If  
   End With  
End Function
Я сам - дурнее всякого примера! ...
 
{quote}{login=}{date=08.10.2012 07:43}{thema=}{post}Вариант - см. файл.{/post}{/quote}  
Уточнение - см. файл.
Страницы: 1
Читают тему
Наверх