Если вы просто хотите проверить значение и логика проверки не слишком сложна, это можно сделать с помощью стандартной проверки данных Excel. Однако, поскольку вы хотите переформатировать значение, чтобы оно было правильным, вам нужно будет использовать VBA или Visual Studio Tools for Office. Ниже приведен простой макрос VBA, который делает то, что вы хотите.
Волшебство происходит, когда происходит событие Worksheet_Change . Для примера я предполагаю, что вы вводите отдельные значения в первом столбце. Функция CorrectPartNo выполняет тяжелую работу. Он анализирует введенное значение и возвращает правильно отформатированное значение или ничего, что указывает на наличие ошибки проверки (проверяется только максимальная длина). Обработка работает на вашем примере, но, вероятно, она слишком проста для реального мира. Это может быть легко улучшено с помощью регулярного выражения или другой такой же мощной обработки.
Обработчик событий продолжает либо обновляя ячейку с правильно отформатированным номером детали, либо делает значение, введенное пользователем, жирным и красным, чтобы указать на ошибку.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim NewValue As String
If (Target.Column = 1 And Target.Count = 1) Then
Application.EnableEvents = False
NewValue = CorrectPartNo(Target.Value)
If (Len(NewValue) = 0) Then
Target.Font.Color = vbRed
Target.Font.Bold = True
Else
Target.Value = NewValue
End If
Application.EnableEvents = True
End If
End Sub
Function CorrectPartNo(PartNo As String)
Dim StartPartNo As String
Dim EndPartNo As String
Dim EndPartNoPosition As Integer
StartPartNo = Left(PartNo, 1)
If (Mid(PartNo, 2, 1) = "-") Then
If (Len(PartNo) > 4) Then
CorrectPartNo = ""
Exit Function
Else
EndPartNoPosition = 3
End If
Else
If (Len(PartNo) > 3) Then
CorrectPartNo = ""
Exit Function
Else
EndPartNoPosition = 2
End If
End If
EndPartNo = Right("0" + Mid(PartNo, EndPartNoPosition), 2)
CorrectPartNo = StartPartNo + EndPartNo
End Function