Как рассчитать, если с несколькими критериями и для простоты можно сделать в 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)

это будет легче понять и легче кодировать

Другие вопросы по тегам