@vasilgut

Как сделать правильно выборку IFS?

Необходимо при помощи трёх переменных рассчитывать систему грейда сотрудников.
Вот, что на данный момент уже есть:
=IFS(R3<3;"Стажёр";И(Q3>1;6>R3>=3;S3>15);"Младший";И(Q3=3;12>R3>=6;S3>30);"Средний";И(Q3=3;12<R3<18;50<=S3);"Старший";И(Q3=3;R3>18;S3=60);"РП")

61fbfca53e721145802055.png
Вот необходимые условия:
61fbfd7269860420559913.png

Почему-то не работает как нужно, помогите понять в чём дело.
Также ссылка на таблицу в Google Sheets: https://docs.google.com/spreadsheets/d/1i97T3OooMG...
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
ForestAndGarden
@ForestAndGarden
Совершенствовать среду обитания
ЕЯНО, три массива условий.

Формулу вот накатал для V3:
=LOOKUP(
  MATCH(
    1
    ;ArrayFormula(
      {Q3=1;Q3=1;Q3=2;Q3=3;Q3=3;Q3=3}
      *{R3<3;R3<3;AND(R3>=3;R3<6);AND(R3>=6;R3<12);AND(R3>=12;R3<18);R3>18}
      *{S3<=13;S3>13;S3>=20;S3>=25;S3>=30;S3>=35}
    )
    ;0
  )
  ;{1;2;3;4;5;6}
  ;{"К увольнению";"Стажёр";"Младший";"Средний";"Старший";"РП"}
)


  1. {Q3=1;Q3=1;Q3=2;Q3=3;Q3=3;Q3=3} — массив условий для знания языка;
  2. {R3<3;R3<3;AND(R3>=3;R3<6);AND(R3>=6;R3<12);AND(R3>=12;R3<18);R3>18} — массив условий для стажа;
  3. {S3<=13;S3>13;S3>=20;S3>=25;S3>=30;S3>=35} — массив условий для общего количества баллов.


*******

Через IFS():
=IFS(
     AND(Q3=1;R3<3;S3<=13);"К увольнению"
    ;AND(Q3=1;R3<3;S3>13);"Стажёр"
    ;AND(Q3=2;AND(R3>=3;R3<6);S3>=20);"Младший"
    ;AND(Q3=3;AND(R3>=6;R3<12);S3>=25);"Средний"
    ;AND(Q3=3;AND(R3>=12;R3<18);S3>=30);"Старший"
    ;AND(Q3=3;R3>18;S3>=35);"РП"
)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever Куратор тега Excel
Учитель, автоэлектрик, программист, музыкант
Может помочь это - реализация кусочно-константной функции
/**
 * Рассчитывает кусочно-константную функцию
 *
 * @author Boew Grigory (ff.nspu@gmail.com)
 * @param {Array} data Входные данные (аргумент)
 * @param {Array} criteria Массив критериев [от, до, значение]
 * @param {any} [defaultValue=""] Значение по умолчанию - то что подставляется, если аргумент не подходит ни под один из критериев
*/
function piecewiseConstant(data, criteria, defaultValue="-"){
  criteria = criteria
              .map(cr=>({ // convert to objects
                fromValue: cr[0],
                toValue: cr[1],
                value: cr[2],
              }))
              .filter(cr=>cr.fromValue!=="" && cr.toValue!==""); // filter empty criteria
  return data.map(row=>row.map(el=>{
    let foundCriteria = criteria.find(cr=>(el>=cr.fromValue)&&(el<cr.toValue));
    if (foundCriteria!==undefined){
      return foundCriteria.value;
    }else{
      return defaultValue;
    };
  }));
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы