1) Английские буквы G,H,I,...,X,Y,Z 2) отобрать, это уже кто на что гаразд придумать. Например, в новой колонке(B) при обнаружении в колонке (А) хотя бы одной русской буквы или символа из латиницы больше F и до Z, что-то написать (например НЕКОРРЕКТНО)
Регистр не различать.
Если описать саму задачу. Есть колонка содержащая MAC-адреса компов. проверить эту колонку на правильность заполнения. Правильность это удовлетворение шаблону ??:??:??:??:??:?? где ?? могут принимать значения 0,1,...,9 и A,B,C,D,E,F
1) Английские буквы G,H,I,...,X,Y,Z 2) отобрать, это уже кто на что гаразд придумать. Например, в новой колонке(B) при обнаружении в колонке (А) хотя бы одной русской буквы или символа из латиницы больше F и до Z, что-то написать (например НЕКОРРЕКТНО)
Регистр не различать.
Если описать саму задачу. Есть колонка содержащая MAC-адреса компов. проверить эту колонку на правильность заполнения. Правильность это удовлетворение шаблону ??:??:??:??:??:?? где ?? могут принимать значения 0,1,...,9 и A,B,C,D,E,FALARMus
Сообщение отредактировал ALARMus - Четверг, 16.08.2012, 12:40
такой вариант: {0,1,2,3,4,5,6,7,8,9,:,A,B,C,D,E,F,a,b,c,d,e,f}
1 вариант:
[vba]
Code
Sub www() Dim i&, y& For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For y = 1 To 17 If (Asc(Mid(Cells(i, 1), y, 1)) >= 48 And Asc(Mid(Cells(i, 1), y, 1)) <= 58) Or _ (Asc(Mid(Cells(i, 1), y, 1)) >= 65 And Asc(Mid(Cells(i, 1), y, 1)) <= 70) Or _ (Asc(Mid(Cells(i, 1), y, 1)) >= 97 And Asc(Mid(Cells(i, 1), y, 1)) <= 102) Then Cells(i, 2) = True Else: Cells(i, 2) = False: Exit For End If Next Next End Sub
[/vba]
2 вариант:
[vba]
Code
Sub qwerty() Dim i&, y&, x(), rez() x = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value ReDim rez(1 To UBound(x), 1 To 1) With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) For y = 1 To 17 If (Asc(Mid(x(i, 1), y, 1)) >= 48 And Asc(Mid(x(i, 1), y, 1)) <= 58) Or _ (Asc(Mid(x(i, 1), y, 1)) >= 65 And Asc(Mid(x(i, 1), y, 1)) <= 70) Or _ (Asc(Mid(x(i, 1), y, 1)) >= 97 And Asc(Mid(x(i, 1), y, 1)) <= 102) Then rez(i, 1) = True Else: rez(i, 1) = False: Exit For End If Next Next End With [B1].Resize(i - 1) = rez() End Sub
[/vba]
такой вариант: {0,1,2,3,4,5,6,7,8,9,:,A,B,C,D,E,F,a,b,c,d,e,f}
1 вариант:
[vba]
Code
Sub www() Dim i&, y& For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For y = 1 To 17 If (Asc(Mid(Cells(i, 1), y, 1)) >= 48 And Asc(Mid(Cells(i, 1), y, 1)) <= 58) Or _ (Asc(Mid(Cells(i, 1), y, 1)) >= 65 And Asc(Mid(Cells(i, 1), y, 1)) <= 70) Or _ (Asc(Mid(Cells(i, 1), y, 1)) >= 97 And Asc(Mid(Cells(i, 1), y, 1)) <= 102) Then Cells(i, 2) = True Else: Cells(i, 2) = False: Exit For End If Next Next End Sub
[/vba]
2 вариант:
[vba]
Code
Sub qwerty() Dim i&, y&, x(), rez() x = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value ReDim rez(1 To UBound(x), 1 To 1) With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) For y = 1 To 17 If (Asc(Mid(x(i, 1), y, 1)) >= 48 And Asc(Mid(x(i, 1), y, 1)) <= 58) Or _ (Asc(Mid(x(i, 1), y, 1)) >= 65 And Asc(Mid(x(i, 1), y, 1)) <= 70) Or _ (Asc(Mid(x(i, 1), y, 1)) >= 97 And Asc(Mid(x(i, 1), y, 1)) <= 102) Then rez(i, 1) = True Else: rez(i, 1) = False: Exit For End If Next Next End With [B1].Resize(i - 1) = rez() End Sub
Последний предложенный Вами файл, там последняя колонка D (последняя с формулами) дает правильную оценку, а именно там где не цифра (результат действия формулы), а написано #ЧИСЛО!, как раз в тех строках и не верный MAC адрес.
Quote (_Boroda_)
Не понял
Последний предложенный Вами файл, там последняя колонка D (последняя с формулами) дает правильную оценку, а именно там где не цифра (результат действия формулы), а написано #ЧИСЛО!, как раз в тех строках и не верный MAC адрес.ALARMus