Тема: Правильные окончания единиц измерения числительных
Часто возникает задача рядом с числительным писать единицу измерения. Если единица измерения отображается сокращённо, то это не вызывает проблем. Но если нужно писать единицу измерения полностью, то хочется получить правильное окончание у этой единицы имерения. Например, нужно отобразить нечто, измеряющееся в тугриках. Тогда нужно писать так:
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