Функция указывающая на определенный символ для задания критерия условию в VBA Excel
Здраствуйте, у меня возник вопрос, при доработке скрипта по форматированию телефонных номеров я столкнулся с проблемой, что не понимаю\ не могу найти функцию как можно в VBA при составлении условия для форматирования, задать как параметр первый символ номера, тобешь что-бы в конце(место с 3мя звездочками) скрипт форматировал номера которые начинались с 8 (поскольку проблема заключается в том, что если номер начинается с +7 и где то в номере есть еще 8 то на выходе получается номер с 2мя +7 по типу такого +7 954 954 +74 34 когда действительный номер должен выглядеть так +7 954 954 84 34), есть мысль что это надо добавлять переменную, выносить первую цифру в другую ячейку и сравнивать эту ячейку с переменной и если все верно то переделывать номер, но это по-моему слишком громоздкое\нерациональное решение, поэтому я хотел спросить есть ли варианты это сделать проще, или где можно почитать на эту тему. Благодарю за уделенное время.
Public Function PrepareNumbers(InputString As String)
Dim i As Long, newString As String
For i = 1 To Len(InputString)
If IsNumeric(Mid(InputString, i, 1)) Or (i = 1 And Mid(InputString, i, 1) = "+") Then
newString = newString & Mid(InputString, i, 1)
End If
Next i
If Len(newString) = 11 And InStr(newString, 7) = 1 Then
newString = "+" & newString
End If
PrepareNumbers = Replace(newString, "+7", "8", 1, 1)
If Len(InputString) = 11 and ***Mid(InputString,,)*** Then
PrepareNumbers = Replace(newString, "8", "+7", 1, 1)
End If
Ответы (2 шт):
Public Function PrepareNumbers(InputString As String)
Dim i As Long, newString As String
For i = 1 To Len(InputString)
If IsNumeric(Mid(InputString, i, 1)) Or (i = 1 And Mid(InputString, i, 1) = "+") Then
newString = newString & Mid(InputString, i, 1)
End If
Next i
If Len(newString) = 11 Then
If InStr(newString, "7") = 1 Then
newString = "+" & newString
Elseif InStr(newString, "8") = 1 Then
newString = "+7" & Right(newString, Len(newString)-1)
Else
newString = "!!! " & newString
End if
Else
newString = "!!! " & newString
End If
PrepareNumbers = newString
End Function
Public Function PrepareNumbers2(InputString As String) As String
Dim sStr As String ', j As Long '
sStr = Replace(InputString, "+", "")
' For j = 1 To Len(InputString) '
' If IsNumeric(Mid$(InputString, j, 1)) Then sStr = sStr & Mid$(InputString, j, 1) '
' Next j '
If Len(sStr) = 11 Then
Select Case Left$(sStr, 1)
Case "7": sStr = "+" & sStr
Case "8": sStr = "+7" & Mid$(sStr, 2)
Case Else: sStr = "Err"
End Select
Else
sStr = "Err"
End If
PrepareNumbers2 = sStr
End Function
B таком варианте в фунцию передается номер, состоящий только из цифр и знака "+". Если нужно чистить от мусора - раскомментировать переменную и цикл, закомментировать или удалить строку
sStr = Replace(InputString, "+", "")
Для варианта, когда количество символов <>11, вместо sStr = "Err" можно организовать дополнительные проверки для корректировки номера. Как пример:
If Len(sStr) = 10 And Left$(sStr, 1) <> "7" And Left$(sStr, 1) <> "8" Then
sStr = "+7" & sStr
Else
sStr = "Err"
End If