2016-07-02 5 views
0

Я использую Harris Benedict Equation для расчета TDEE людей. Я использую Google Таблицы для создания своего рода формы для этого, но листы Google с трудом работают. Я получаю ошибку анализа синтаксиса. Форматирование довольно плохо из-за этого.Отладка калькулятора пригодности с несколькими вложенными операциями IF

Я знаю, что я делаю небольшую ошибку запятой или скобки где-то, но я не уверен, где.

Код должен спросить, предпочитают ли люди метрические/имперские, мужские/женские, рост, вес, уровень активности и возраст.

Вот как делают листы Google if statements. Это в значительной степени IS-

ЕСЛИ (A2 = "Foo", "А2 Foo")

Синтаксис

IF (logical_expression, значение_если_истина, значение_если_ложь)

=IF (D9=”Imperial”, 
    IF(D10=”Male”, 
      IF(D16=”Sedentary (no exercise)”, 
        66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.2, 

        IF(D16=”Lightly Active (1-3 days of exercise/week)”, 
          66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.375, 

          IF(D16=”Moderately Active (3-5 days of exercise/week)”, 
            66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.55, 

            IF(D16=”Very Active(6-7 days of exercise/week)”, 

              66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.725, 
              IF(D16=”Extremely Active(exercise twice a day)”, 

                66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.9, 
              “ “))))) 


      IF(D16=”Sedentary (no exercise)”, 
        655.1 + (4.35 x D14) + (4.7 x (D13x12+G13)) - (4.7 x D12) x1.2, 

          IF(Lightly Active (1-3 days of exercise/week)”, 
            655.1 + (4.35 x D14) + (4.7 x (D13x12+G13)) - (4.7 x D12) x1.375, 

            IF(Moderately Active (3-5 days of exercise/week)”, 
              655.1 + (4.35 x D14) + (4.7 x (D13x12+G13)) - (4.7 x D12) x1.55, 

              IF(D16=”Very Active(6-7 days of exercise/week)”, 
                655.1 + (4.35 x D14) + (4.7 x (D13x12+G13)) - (4.7 x D12) x1.725, 

                IF(D16=”Extremely Active(exercise twice a day)”, 
                  655.1 + (4.35 x D14) + (4.7 x (D13x12+G13)) - (4.7 x D12) x1.9, 
                “ “)))))) 


    IF(D10=”Male”, 
      IF(D16=”Sedentary (no exercise)”, 
        66.5 + (13.75 x D14) + (5.003 x D13) – (6.755 x D12)x1.2, 


        IF(Lightly Active (1-3 days of exercise/week)”, 
          66.5 + (13.75 x D14) + (5.003 x D13) – (6.755 x D12)x1.375, 


          IF(Moderately Active (3-5 days of exercise/week)”, 
            66.5 + (13.75 x D14) + (5.003 x D13) – (6.755 x D12)x1.55, 


            IF(D16=”Very Active(6-7 days of exercise/week)” 
              66.5 + (13.75 x D14) + (5.003 x D13) – (6.755 x D12)x1.725, 


              IF(D16=”Extremely Active(exercise twice a day)”, 

                66.5 + (13.75 x D14) + (5.003 x D13) – (6.755 x D12)x1.9, 

              “ “))))) 



      IF(D16=”Sedentary (no exercise)”, 
        655.1 + (9.563 x D14) + (1.850 x D13) – (4.676 x D12) x1.2, 


        IF(Lightly Active (1-3 days of exercise/week)”, 
          655.1 + (9.563 x D14) + (1.850 x D13) – (4.676 x D12) x1.375, 


          IF(Moderately Active (3-5 days of exercise/week)”, 
            655.1 + (9.563 x D14) + (1.850 x D13) – (4.676 x D12) x1.55, 


            IF(D16=”Very Active(6-7 days of exercise/week)”, 

              655.1 + (9.563 x D14) + (1.850 x D13) – (4.676 x D12) x1.725, 


              IF(D16=”Extremely Active(exercise twice a day)”, 

                655.1 + (9.563 x D14) + (1.850 x D13) – (4.676 x D12) x1.9, 

              “ “)))))) 

    ) 

ответ

2

У вас есть такие вещи, как IF(Lightly Active (1-3 days of exercise/week)”, которые, очевидно, не собираются работать. Такой вид гнездования IFs не должен быть там, в первую очередь, это минное поле опечаток. Вместо этого используйте hlookup или vlookup. будет необходимо

=if(D9=”Imperial”, 
    if(D10=”Male”, 
    vlookup(D16, { 
     ”Sedentary (no exercise)”, 
     66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.2; 
     ”Lightly Active (1-3 days of exercise/week)”, 
     66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.375; 
     ”Moderately Active (3-5 days of exercise/week)”, 
     66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.55; 
     ”Very Active(6-7 days of exercise/week)”, 
     66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.725; 
     ”Extremely Active(exercise twice a day)”, 
     66 + (6.2 x D14) + (12.7 x (D13x12+G13)) – (6.76 x D12)x1.9, 
     }, 2, false) 
    .... 

Обратите внимание, что вы можете поставить 15 вместо 5 вариантов здесь, и никаких новых круглых скобки: Пример vlookup заменяющих пяти вложенного МСФА.

В зависимости от структуры ваших данных, вы можете быть в состоянии поставить эти справочные таблицы, в другом месте в листе, скажем, в таблице A1: B5, Таблица A6: B11, и т.д.:

=if(D9=”Imperial”, 
    if(D10=”Male”, 
    vlookup(D16, Table!A1:B5, 2, false), 
    vlookup(D16, Table!A6:B11, 2, false) 
    ), 
    if(D10=”Male”, 
    vlookup(D16, Table!A12:B16, 2, false), 
    vlookup(D16, Table!A17:B21, 2, false) 
    ) 
    ) 

One может обернуть каждый vlookup в iferror, так что, когда входные данные не ожидаются, вы получите пустой вывод вместо # N/A! (хотя последнее более информативно).

Смежные вопросы