среда, 27 декабря 2017 г.

Согласование с числительными в Excel

Еще немного Excel.
В русском языке существует понятие склонение: мы говорим 2 минуты, а не 2 минута, 3 года, а не 3 лет. То есть с разными числительными и используем существительные в разных падежах. Подробнее в правилах русского языка, но сейчас нас интересует как сделать так чтобы в экселе слова сочетающиеся с числительными выставлялись в правильной форме.
Если отслеживать закономерность то можно выделить 3 группы:
0 дней 5,6 дней,...10,11,12 дней ..,20,25,26 дней и так далее - то есть все что оканчиваются на ноль, заканчиваются на 5,6,7,8,9 и все с 10 до 20 (то есть вторая цифра с конца 1) - мы говорим дней
1 день, 21 день, 31 и так далее - то есть последняя единица
2, 3, 4 дня, 22,23,24 дня и так далее - то есть заканчиваются на 2, 3 и 4
В итоге задача сводится к тому чтобы выделить эти группы правильно и в зависимости от того куда относится заданное число, мы прописываем слово в правильном падеже и форме. Самая короткая конструкция которую мне удалось найти выглядит так

="минут"&ТЕКСТ(ОСТАТ(МАКС(ОСТАТ(A1-11;100);9);10);"[<1]а;[<4]ы;")

после преобразований получается 3 группы заканчивается на 0 (это те что раньше заканчивались на 1) группа<4 (2,3,4), и все остальные. тут есть общий корень "минут", а окончание меняется. Что делать с годами? Можно вот так:

=ТЕКСТ(ОСТАТ(МАКС(ОСТАТ(A1-11;100);9);10);"[<1]\го\д;[<4]\го\да;лет")

Перед буквами г и д приходится ставить косую черту, потому что эксель понимает это как спецсимвол
Есть и такая конструкция, где группы чуть более понятнее разделяются

=ЕСЛИ(ЦЕЛОЕ(A1/10)=1;"секунд";"секунд"&ТЕКСТ(ОСТАТ(A1-1;10);"[=0]а;[<4]ы;"))

То есть если у нас вторая цифра с конца 1, то сразу ставим секунд, если нет, то проверяем на что заканчивается и уже потом 3 группы опять

И еще одна интересная штучка: когда разбирался как работает функция ТЕКСТ, узнал что в экселе можно добавить пользовательский формат, который будет сразу окрашивать текст в цвет в зависимости от значения, например вот так:

[Красный][<=100]"min";[Синий][>100]"max" - то есть ввел число 55, а оно стало словом min и красным

Комментариев нет:

Отправить комментарий