Страницы: 1
RSS
есть ли буквы в строке?
 
Товарищи, доброе утро. подскажите как решить такой вопрос. Есть столбец (формат текстовый)  
номер удостоверения личности    
в основном это серия и номер паспорта в формате  "01 23 456789" , но  
иногда попадаются загран. паспорта и паспорта граждан других стран и военные билеты.  
Стоит задача - вычленить эти паспорта.  
С международным просто - если len(trim(range(A"" & i & ""))) >12    
У военников и паспортов В серии - буквы.  
например "СК 12356"    
 
Вопрос - как определить что в строке есть буквы?
 
проверяем первый символ:  
=НЕ(ЕЧИСЛО(-ЛЕВСИМВ(A1)))  
Проверяем три первых символа:  
=ЕСЛИ(СУММ(--ЕЧИСЛО(-ПСТР(A1;{1;2;3};1)))=3;1;0)
 
спасибо, vikttur! вопрос решен.
 
Public Sub www()  
   Dim c As Range  
   For Each c In Me.UsedRange.Columns(1).Cells  
       If c.Value Like "[A-Z,А-ЯЁ]" Then Debug.Print c.Address
   Next  
End Sub
Я сам - дурнее всякого примера! ...
 
Так если в любом месте буквы:  
Public Sub www()  
   Dim c As Range, f As Boolean  
   For Each c In Me.UsedRange.Columns(1).Cells  
       For i = 1 To Len©  
           If Mid(c.Value, i, 1) Like "[A-Z,А-ЯЁ]" Then
               c.Interior.ColorIndex = 3  
               Exit For  
           End If  
       Next  
   Next  
End Sub
Я сам - дурнее всякого примера! ...
 
так вроде все равно длина строки отличается с буквами?
Живи и дай жить..
 
KukLP, спасибо, последнее решение - хорошо подошло. то что нужно. сначала думал  
предложенную victtur формулу в vba загнать - но не нашел в worksheetfunction  
формулы не().  
 
'57574'
 
{quote}{login=слэн}{date=07.10.2011 12:12}{thema=}{post}так вроде все равно длина строки отличается с буквами?{/post}{/quote}это да. Как вариант считать по кол-ву пробелов:  
2 = "01 23 456789"  
1 = "СК 12356"
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Еще вариант из оперы посимвольного разбора строки  
 
Sub io()  
Dim i%  
With ActiveCell  
   For i = 1 To Len(.Value)  
       If Not Mid(.Value, i, 1) Like "[0-9 ]" Then MsgBox 1: Exit For
   Next  
End With  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
to nerv:    
Like "[0-9 ]" конечно должен быть быстрее чем Like "[A-Z,А-ЯЁ]".
 
но скорость особа не важна.  
Насчет длины строки - я понятия не имею какие могут быть номера паспортов у граждан других стран и цивилизаций.  
(мне показали один пример - паспорт Казахстана.)  
так что лучше перебирать всю строку.  
 
Спасибо всем.
 
Саня, то что ты написал можно так:  
If Mid(.Value, i, 1) Like "[!0-9 ]" Then MsgBox 1: Exit For
Я сам - дурнее всякого примера! ...
 
Согласен. Забыл про восклицательный знак : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=egonomist}{date=07.10.2011 12:28}{thema=}{post}KukLP, спасибо, последнее решение - хорошо подошло. то что нужно. сначала думал  
предложенную victtur формулу в vba загнать - но не нашел в worksheetfunction  
формулы не().  
 
'57574'{/post}{/quote}  
 
 
это просто not
Страницы: 1
Наверх