Как рассчитать, если с несколькими критериями и для простоты можно сделать в VBA
Я хочу использовать формулу if для следующих критериев, но формула становится слишком длинной. это можно сделать через VBA. у меня есть 31 столбец в зависимости от количества дней в месяце.
Обозначения 1-го критерия:
- Менеджер - Человек
- Asst Manager - AsstMan
- Executive - Exe
- Супервайзер - Суп
- Офицер - Выкл
- Фронт офицер - Фло
- Водитель - DVR
- Женский персонал - FS
2-й критерий посещаемости
- P = настоящее время
- A = отсутствует
- W = Еженедельно выходной
- V = Отпуск
- L = оставить без оплаты
- D = Оставил работу
Я получил лист, который говорит мне на основе их идентификационного номера их посещаемости. - Теперь я хочу рассчитать их суточную зарплату на основе их назначения и посещаемости. - на основании их назначения, посещаемости и места, где они выполняют свою работу (вид надбавки за местоположение).
Ниже приведена формула if, которую я получил:
=IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Man"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("P"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("AsstMan"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("P"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Exe"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("P"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FLO"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("P"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FS"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("P"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Man"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("A"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Exe"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("A"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FS"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("A"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FLO"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("A"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("AsstMan"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("A"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Man"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("W"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("AsstMan"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("W"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FLO"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("W"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Exe"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("W"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FS"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("W"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Man"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("V"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("AsstMAn"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("V"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Exe"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("V"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FLO"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("V"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FS"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("V"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Man"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("L"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("AssMAn"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("L"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("Exe"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("L"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FLO"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("L"=Attendence!E4),0)),IF(ISNA(MATCH(1,($B4=INDIRECT("'"&E$3&"'!$D$4:$D$1000"))*("FS"=INDIRECT("'"&E$3&"'!$G$4:$G$1000"))*("L"=Attendence!E4),0)),"",-(ABBR!$C$79/$E$1)),-(ABBR!$C$78/$E$1)),-(ABBR!$C$77/$E$1)),-(ABBR!$C$76/$E$1)),-(ABBR!$C$75/$E$1)),(ABBR!$C$79/$E$1)),(ABBR!$C$78/$E$1)),(ABBR!$C$77/$E$1)),(ABBR!$C$76/$E$1)),(ABBR!$C$75/$E$1)),(ABBR!$C$79/$E$1)),(ABBR!$C$78/$E$1)),(ABBR!$C$77/$E$1)),(ABBR!$C$76/$E$1)),(ABBR!$C$75/$E$1)),("0")),("0")),("0")),("0")),("0")),(ABBR!$C$79/$E$1)),(ABBR!$C$78/$E$1)),(ABBR!$C$77/$E$1)),(ABBR!$C$76/$E$1)),(ABBR!$C$75/$E$1))
Спросите, пропустил ли я что-нибудь. Нужна помощь
заранее спасибо
1 ответ
Используйте оператор select...case... ( https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement)
это будет легче понять и легче кодировать