Мне нужна моя электронная таблица, чтобы пользователи могли вводить только в формате hh.mm/hh.mm для своего рабочего шаблона, например, если кто-то работает 12,5 часов в течение 37 часов в неделю, его можно ввести только как 12,50/37,00.
1 ответ
В редакторе VBA создайте новый модуль в своей книге (вам нужно сохранить его как .xls или .xlsm , а не .xlsx) и вставьте код следующим образом:
Function RegEx(Pattern As String, TextToSearch As String) As String 'vv
    Dim RE As Object, REMatches As Object
    Set RE = CreateObject("vbscript.regexp")
    With RE
        .MultiLine = False
        .Global = False
        .IgnoreCase = False
        .Pattern = Pattern
    End With
    Set REMatches = RE.Execute(TextToSearch)
    If REMatches.Count > 0 Then
        RegEx = REMatches(0)
    Else
        RegEx = vbNullString
    End If
End Function '^^
Public Function IsGood(stir As String)
    If RegEx("[0-9][0-9]\.[0-9][0-9]/[0-9][0-9]\.[0-9][0-9]", stir) = stir Then
        IsGood = "GOOD"
    Else
        IsGood = "BAD"
    End If
End Function
Первая функция, RegEx , выполняет сопоставление регулярного выражения. Вторая функция, IsGood , возвращает строку GOOD если выходная строка соответствует входной строке (т. Е. Вся строка соответствует точно регулярному выражению), и BAD противном случае.
Теперь в запасном столбце где-то (это может быть скрытый столбец) на рабочем листе напишите формулу, например:
=IsGood(A1) (при необходимости используйте привязки, если вам нужно сделать это для нескольких строк)
Затем перейдите в раздел Данные -> Проверка данных -> Проверка данных ... на ленте, и на листе будут выделены ячейки, содержащие данные для проверки.
Измените раскрывающийся список «Разрешить:», указав "Пользовательский", и "Формула", например:
=B1="GOOD"
Замените "B1" ссылкой на первую ячейку, содержащую формулу =IsGood не на ячейки, содержащие ваши входные данные.
Теперь, чтобы проверить ваши результаты:
- Введите что-то вроде "привет" в ячейку, подлежащую проверке данных, и вы получите сообщение об ошибке и не сможете вносить изменения.
 - Введите что-то вроде «12.34/56.78», и оно будет работать нормально, как обычно в Excel.
 - Введите что-то вроде «12.34,56.78», и вы получите ошибку проверки данных из-за того, что запятая не соответствует регулярному выражению.
 
Вы можете настроить регулярное выражение в моем коде, чтобы сделать его более мягким, если вы можете принимать значения типа "12" вместо «12.00», но это будет зависеть от ваших точных требований и вашей способности понимать регулярные выражения.
В основном, [0-9][0-9]\.[0-9][0-9]/[0-9][0-9]\.[0-9][0-9] - это регулярное выражение, которое говорит:«соответствует 2-значное число, за которым следует точка, затем другое 2-значное число, затем косая черта, затем еще одно двузначное число, затем точка, затем еще одно двузначное число ". Это довольно строгое:
- Любые пробелы не будут совпадать
 - Если любое из чисел содержит 0, 1 или 3 или более цифр, оно не будет совпадать. Например, 
12.375/37.00потерпит неудачу из-за дополнительной цифры5. - Использование обратной косой черты 
\вместо прямой косой черты/не сможет соответствовать. Вы можете использовать символ чередования|в регулярном выражении, чтобы указать, что любая из двух возможностей является приемлемой, и таким образом вы могли бы разрешить ЛЮБОЙ прямой или обратный слеш. - Возможности продолжаются. Вы можете быть более слабыми и использовать любое количество цифр, используя квантификаторы. Я не собираюсь покрывать все возможности регулярных выражений в этом ответе.
 
