Добрый день! Ковыряюсь со склонениями слов "Осталось" и "день" Итак, осталось N "дней", или "дня" или "день"? Значение числа N находится в ячейке A1. Функцией
Код
Остат(A1;10)
выдергиваем последнюю цифру, далее условие Если: 0;5;6;7;8;9 - "Осталось" N "дней" 1 - "Остался" N "день" 2;3;4 - "Осталось" N "дня" Данная формула считает неверно:
Понимаю, что можно было вас не беспокоить, создав таблицу соответствия на скрытном листе, но здесь функция ВПР() не поможет, т.к. используется вариации двух зависимых переменных от одного значения. Конечно же, это всего лишь утверждение чайника))
Добрый день! Ковыряюсь со склонениями слов "Осталось" и "день" Итак, осталось N "дней", или "дня" или "день"? Значение числа N находится в ячейке A1. Функцией
Код
Остат(A1;10)
выдергиваем последнюю цифру, далее условие Если: 0;5;6;7;8;9 - "Осталось" N "дней" 1 - "Остался" N "день" 2;3;4 - "Осталось" N "дня" Данная формула считает неверно:
Понимаю, что можно было вас не беспокоить, создав таблицу соответствия на скрытном листе, но здесь функция ВПР() не поможет, т.к. используется вариации двух зависимых переменных от одного значения. Конечно же, это всего лишь утверждение чайника))Мурад
А слово "Осталось" куда дели?)) Я использую эту формулу в реестре задач на месяц. Для напоминания об оставшемся времени до начала мероприятия. Хотелось бы сохранить слово "Осталось". Понравилось у MCH, что он укорачивает формулу, используя только окончания рассматриваемых слов. ось N ней ся N ень ось N ня Ошибка в моем варианте, мне кажется, кроется в этой части формулы:
Код
Остат(A1;10)=или(0;5;6;7;8;9)
. Это условие всегда оказывается неверным. М.б. потому что я пытаюсь сравнить число с текстом? Или я неправильно сравниваю результат функции Остат с массивом элементов?
А слово "Осталось" куда дели?)) Я использую эту формулу в реестре задач на месяц. Для напоминания об оставшемся времени до начала мероприятия. Хотелось бы сохранить слово "Осталось". Понравилось у MCH, что он укорачивает формулу, используя только окончания рассматриваемых слов. ось N ней ся N ень ось N ня Ошибка в моем варианте, мне кажется, кроется в этой части формулы:
Код
Остат(A1;10)=или(0;5;6;7;8;9)
. Это условие всегда оказывается неверным. М.б. потому что я пытаюсь сравнить число с текстом? Или я неправильно сравниваю результат функции Остат с массивом элементов?Мурад
Сообщение отредактировал Мурад - Среда, 11.02.2015, 17:24
Спасибо всем! Особенно Нику. Формула работает, я так понимаю, используя кодировку ASCII или как ее там. Если у вас есть возможность, объясните, почему в моем варианте первое условие не срабатывает? Может скобки не так поставил...
Спасибо всем! Особенно Нику. Формула работает, я так понимаю, используя кодировку ASCII или как ее там. Если у вас есть возможность, объясните, почему в моем варианте первое условие не срабатывает? Может скобки не так поставил...Мурад
Если не побрезгуете UDF, то вот, когда-то писал для похожей ситуации [vba]
Код
Function ИнтервалВремени(Интервал As Long, Optional Ед_Времени As String, Optional Прописные As Boolean) Dim I As Integer, D As String I = Интервал Mod 100 If I > 20 Then I = I Mod 10 Ед_Времени = UCase(Ед_Времени) S = "" If Ед_Времени = "" Then Ед_Времени = "Д" Select Case Ед_Времени Case "Д" If I = 1 Then S = " день" Else If (I >= 2 And I < 5) Then S = " дня" Else: S = " дней" Case "Н" If I = 1 Then S = " неделя" Else If (I >= 2 And I < 5) Then S = " недели" Else: S = " недель" Case "М" If I = 1 Then S = " месяц" Else If (I >= 2 And I < 5) Then S = " месяца" Else: S = " месяцев" Case "Г" If I = 1 Then S = " год" Else If (I >= 2 And I < 5) Then S = " года" Else: S = " лет" Case "D" If I = 1 Then S = " день" Else If (I >= 2 And I < 5) Then S = " дня" Else: S = " дней" Case "W" If I = 1 Then S = " неделя" Else If (I >= 2 And I < 5) Then S = " недели" Else: S = " недель" Case "M" If I = 1 Then S = " месяц" Else If (I >= 2 And I < 5) Then S = " месяца" Else: S = " месяцев" Case "Y" If I = 1 Then S = " год" Else If (I >= 2 And I < 5) Then S = " года" Else: S = " лет" End Select If Прописные Then S = UCase(S) ИнтервалВремени = Format(Интервал) & S End Function
[/vba] Функция ИнтервалВремени в качестве второго аргумента принимает: Д или D для Дней Н или W для недель М или M для месяцев Г или Y для лет Нечувствительна к регистру При невведенном втором аргументе считает в днях Если второй аргумент введен неправильно, возвращает введенное число, преобразованное в текст Если третий аргумент - Прописные (необязательный) равен Истина (1), формула возвращает значение в верхем регистре
Если не побрезгуете UDF, то вот, когда-то писал для похожей ситуации [vba]
Код
Function ИнтервалВремени(Интервал As Long, Optional Ед_Времени As String, Optional Прописные As Boolean) Dim I As Integer, D As String I = Интервал Mod 100 If I > 20 Then I = I Mod 10 Ед_Времени = UCase(Ед_Времени) S = "" If Ед_Времени = "" Then Ед_Времени = "Д" Select Case Ед_Времени Case "Д" If I = 1 Then S = " день" Else If (I >= 2 And I < 5) Then S = " дня" Else: S = " дней" Case "Н" If I = 1 Then S = " неделя" Else If (I >= 2 And I < 5) Then S = " недели" Else: S = " недель" Case "М" If I = 1 Then S = " месяц" Else If (I >= 2 And I < 5) Then S = " месяца" Else: S = " месяцев" Case "Г" If I = 1 Then S = " год" Else If (I >= 2 And I < 5) Then S = " года" Else: S = " лет" Case "D" If I = 1 Then S = " день" Else If (I >= 2 And I < 5) Then S = " дня" Else: S = " дней" Case "W" If I = 1 Then S = " неделя" Else If (I >= 2 And I < 5) Then S = " недели" Else: S = " недель" Case "M" If I = 1 Then S = " месяц" Else If (I >= 2 And I < 5) Then S = " месяца" Else: S = " месяцев" Case "Y" If I = 1 Then S = " год" Else If (I >= 2 And I < 5) Then S = " года" Else: S = " лет" End Select If Прописные Then S = UCase(S) ИнтервалВремени = Format(Интервал) & S End Function
[/vba] Функция ИнтервалВремени в качестве второго аргумента принимает: Д или D для Дней Н или W для недель М или M для месяцев Г или Y для лет Нечувствительна к регистру При невведенном втором аргументе считает в днях Если второй аргумент введен неправильно, возвращает введенное число, преобразованное в текст Если третий аргумент - Прописные (необязательный) равен Истина (1), формула возвращает значение в верхем регистреМВТ