1

Тема: Правильные окончания единиц измерения числительных

Часто возникает задача рядом с числительным писать единицу измерения. Если единица измерения отображается сокращённо, то это не вызывает проблем. Но если нужно писать единицу измерения полностью, то хочется получить правильное окончание у этой единицы имерения. Например, нужно отобразить нечто, измеряющееся в тугриках. Тогда нужно писать так:
1 тугрик
2, 3, 4 тугрика
5-20 тугриков
21 тугрик и т.д.
Для упрощения этой задачи я написал универсальную (надеюсь) функцию, определяющую правильное окончание для именительного падежа, но, в принципе, ничего не мешает использовать её и для других падежей.

'Определение правильного окончания единицы измерения
Function RightEnding(Number As Long, OneEnd As String, TwoFourEnd As String, OtherEnd As String)
  'OneEnd — окончание для чисел, оканчивающихся на 1, кроме 11
  'TwoFourEnd — окончание для чисел, оканчивающихся на 2, 3, 4, кроме 12, 13, 14
  'OtherEnd — окончание для всех остальных чисел.
  
  Dim NumberString As String
  NumberString = Str(Number)
  If Val(Right(NumberString, 2)) >= 10 And Val(Right(NumberString, 2)) <= 19 Then
    RightEnding = OtherEnd
  ElseIf Val(Right(NumberString, 1)) >= 2 And Val(Right(NumberString, 1)) <= 4 Then
    RightEnding = TwoFourEnd
  ElseIf Val(Right(NumberString, 1)) = 1 Then
    RightEnding = OneEnd
  ElseIf Val(Right(NumberString, 1)) = 0 Or Val(Right(NumberString, 1)) >= 5 Then
    RightEnding = OtherEnd
  End If
  
End Function

Этой функции нужно передать такие параметры: число, окончание единицы измерения, если число заканчивается на 1, но не на 11, окончание  единицы измерения, если число заканчиваетс на 2, 3, 4, но не на 12, 13, 14, окончание единицы измерения для остальных чисел
Пример использования:

Sub test()
  Dim n As Integer
  Dim s As String
  
  n = CInt(InputBox("Введите число"))
  MsgBox n & " тугрик" & RightEnding(CLng(n), "", "а", "ов")
End Sub
Лучше день потерять — потом за пять минут долететь!