Страницы: 1
RSS
Проверка ячейки на недопустимые символы.
 
Всем привет.  
Поиском ничего похожего не нашел. Странно, задача по идее не эксклюзивная.  
Есть некая ведомость. Необходимо проверить каждую ячейку столбца "Фамилия" на недопустимые в фамилии символы.  
По идее фамилия может содержать только буквы А-Я и A-Z ну и "-".  
А символы типа ".", ":","?","*","..." т.д. - являются недопустимыми.  
 
Помогите плз. грамотно решить задачу.  
 
Алексей  
(файл прикладывать смысла нет, суть вроде ясна)
 
Function MaskCompare(Txt As String, mask As String, CaseSensitive As Boolean)  
   If Not CaseSensitive Then  
       Txt = UCase(Txt)  
       mask = UCase(mask)  
   End If  
         
   If Txt Like mask Then  
           MaskCompare = True  
       Else  
           MaskCompare = False  
   End If  
End Function
 
{quote}{login=-Медведь-}{date=29.06.2011 02:16}{thema=Проверка ячейки на недопустимые символы.}{post}Всем привет.  
Поиском ничего похожего не нашел. Странно, задача по идее не эксклюзивная.  
Есть некая ведомость. Необходимо проверить каждую ячейку столбца "Фамилия" на недопустимые в фамилии символы.  
По идее фамилия может содержать только буквы А-Я и A-Z ну и "-".  
А символы типа ".", ":","?","*","..." т.д. - являются недопустимыми.  
 
Помогите плз. грамотно решить задачу.  
 
Алексей  
 
 
..Z ну и "-".  
А этот почему допустим?  
(файл прикладывать смысла нет, суть вроде ясна){/post}{/quote}
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Еще раз.  
 
Почему этот знак "-" допустим в ФИО?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, есть такой дядька с фамилией Мамин-Сибиряков. Без "-" тут никак :-))
 
{quote}{login=Владимир}{date=29.06.2011 02:21}{thema=}{post}Еще раз.  
 
Почему этот знак "-" допустим в ФИО?{/post}{/quote}  
Иванов-Смоленский. А Мамин он Сибиряк
 
{quote}{login=Владимир}{date=29.06.2011 02:21}{thema=}{post}Почему этот знак "-" допустим в ФИО?{/post}{/quote}  
Петров-Водкин ещё :-)
 
Остальные знаки сами добавите.  
 
---  
88878
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Знак вопроса тоже в тильду заключите, т.к. он тоже является служебным символом.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Мы с Hugo делали такую ЮДФ на форуме для Serge007.  
Public Function Replace_symbols(ByVal sStr As String) As String  
Dim i As Byte  
Dim St As String  
St = "!#$%&'()*+,-./:;<=>?[\]_`{|}~"' В этой строке сам удалишь лишние символы. Я в формулах не спец.
For i = 1 To Len(St)  
sStr = Replace(sStr, Mid(St, i, 1), " ")  
Next  
Replace_symbols = sStr  
End Function
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=29.06.2011 02:48}{thema=}{post}Я в формулах не спец.  
{/post}{/quote}  
 
Да ладно тебе, скромничать..    
;D
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Спасибищще всем!!!  
Поразительная оперативность!  
 
Алекс
 
Почти работает.  
Но как-то некрасиво:  
 
Sub Check110(EmplRow, EmplCol)  
   Dim i As Byte  
   Dim St As String  
   St = Trim(Worksheets("Employees").Cells(EmplRow, EmplCol))  
   For i = 1 To Len(St)  
   If UCase(Mid(St, i, 1)) Like "[А-Я]" Or UCase(Mid(St, i, 1)) Like "[A-Z]" Or Mid(St, i, 1) = "-" Or Mid(St, i, 1) = " " Then
   Else  
   Worksheets("Employees").Cells(EmplRow, EmplCol).Interior.ColorIndex = 3  
   Worksheets("ErrLog").Cells(LogRow, 3) = "Поле '" & Worksheets("Employees").Cells(1, EmplCol) & "' содержит недопустимые символы"  
   LogRow = LogRow + 1  
   Exit Sub  
   End If  
   Next  
End Sub  
 
Вспмнил ещё про "пробел" который бывает в фамилиях типа "Исламова Севда Джалил кызы"  
 
Возможно ли оптимизировать код?  
 
Алекс
 
Так вроде быстрее будет, но не уверен, что всё 100% правильно (поотключал лишнее):  
 
Sub Check110() '(EmplRow, EmplCol)  
Dim i As Byte  
Dim St As String, temp$  
St = "dff.gh/ 7 ?dsf 2144" 'Trim(Worksheets("Employees").Cells(EmplRow, EmplCol))  
For i = 1 To Len(St)  
temp = UCase(Mid(St, i, 1))  
Select Case temp  
Case "А" To "Я"  
Case "A" To "Z"  
Case "-"  
Case " "  
Case Else  
Debug.Print temp  
End Select  
'Worksheets("Employees").Cells(EmplRow, EmplCol).Interior.ColorIndex = 3  
'Worksheets("ErrLog").Cells(LogRow, 3) = "Поле '" & Worksheets("Employees").Cells(1, EmplCol) & "' содержит недопустимые символы"  
'LogRow = LogRow + 1  
'Exit Sub  
Next  
End Sub  
 
Но тут ведь RegExp просится, но я в нём ещё не освоился...
 
End Select  
перед Next передвинуть нужно, ну Вы надеюсь поняли...
 
Спасибо!  
Тоже вчера "допер" до такой схемы.  
 
Вот что получилось:  
 
Sub Check110(EmplRow, EmplCol, Sym1, Sym2)  
   Dim i As Byte  
   Dim St As String  
   St = Trim(Worksheets("Employees").Cells(EmplRow, EmplCol))  
   For i = 1 To Len(St)  
   Select Case Mid(St, i, 1)  
   Case 0 To 9  
       Sym = 1  
   Case "a" To "z"  
       Sym = 2  
   Case "A" To "Z"  
       Sym = 3  
   Case "à" To "ÿ"  
       Sym = 4  
   Case "À" To "ß"  
       Sym = 5  
   Case "-"  
       Sym = 6  
   Case " "  
       Sym = 7  
   Case "."  
       Sym = 8  
   Case Else  
       Sym = 0  
   End Select  
   If Sym < Sym1 Or Sym > Sym2 Then  
   Worksheets("Employees").Cells(EmplRow, EmplCol).Interior.ColorIndex = 3  
   Worksheets("ErrLog").Cells(LogRow, 3) = "Ïîëå '" & Worksheets("Employees").Cells(1, EmplCol) & "' ñîäåðæèò íåäîïóñòèìûå ñèìâîëû"  
   LogRow = LogRow + 1  
   Exit Sub  
   Else  
   End If  
   Next  
End Sub  
 
 
Зато теперь можно проверять не только фамилии, но и, скажем должности:  
 
'   Проверка фамилии (столбец 1) на недопустимые символы (допустимы: буквы, "-" и " ")  
   Check110 EmplRow, 1, 2, 7  
 
'   Проверка должности (столбец 2) на недопустимые символы (допустимы: ЦИФРЫ, буквы, "-" и " " и ещё ".")  
   If Worksheets("Employees").Cells(EmplRow, 8) = "" Then  
   Else  
   Check110 EmplRow, 2, 1, 8  
   End If  
 
Алексей
Страницы: 1
Читают тему
Наверх