Таблицы Google — эквивалент цикла FOR

#google-sheets #google-sheets-formula #cumulative-sum

#google-sheets #google-sheets-формула #кумулятивная сумма

Вопрос:

 A1 = 8
A2 = 14
  

Я не знаю, существует ли эквивалент для этого в Google Sheets, но то, что я пытаюсь сделать, это то, что для каждого кратного 5 A1 я хочу вычесть 5 из A2 и сделать его одной строкой A3 . Итак, в этом примере A3 = 14/9 , и если A1 = 12; A3 = 14/9/4 это должно даже перейти в отрицательные значения в случае A1 = 16; A3 = 14/9/4/-1

В конечном счете, я бы хотел по возможности избегать использования системы API / Script. Прямо сейчас единственный способ, которым я могу это сделать, — это тонна IF() обработчиков.

Это формула, которую я сейчас использую, но, по понятным причинам, это беспорядок и перестает работать, когда IF() они заканчиваются.

 =A2amp;
  IF(A1>5, 
   "/"amp;A2-5amp;
   IF(A1>10, 
    "/"amp;A2-10amp;
    IF(A1>15, 
     "/"amp;A2-15amp;
     IF(A1>20, 
      "/"amp;A2-20
     , "")
    , "")
   , "")
  , "")
  

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

1. как вы получили разделение «14/9»?

2. Потому что 14-5 = 9. Я хочу добавлять каждый последующий результат в одну строку, разделенную /

Ответ №1:

 =ARRAYFORMULA(QUERY(IF(ROW(INDIRECT("A1:A"amp;QUOTIENT(A1, 5) 1)),
 MMULT(TRANSPOSE((     ROW(INDIRECT("A2:A"amp;QUOTIENT(A1, 5) 2))<=
       TRANSPOSE(      ROW(INDIRECT("A2:A"amp;QUOTIENT(A1, 5) 2))))*
      {A2; TRANSPOSE(SPLIT(REPT(5*-1amp;"♦",  QUOTIENT(A1, 5)), "♦"))}), 
 SIGN({A2; TRANSPOSE(SPLIT(REPT(5*-1amp;"♦",  QUOTIENT(A1, 5)), "♦"))})^2), 
 IFERROR(1/0)), "limit "amp;QUOTIENT(A1, 5)amp;" offset 1"))
  

0

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

1. запуск всего мода

2. Не совсем то, что я хотел, но с несколькими изменениями это работает. Я изменил его =A2amp;if(A1>5, "/"amp;JOIN(...Stuff...), "") для правильного форматирования так, как хотел, но в остальном он отлично работает. Большое спасибо, я оставлю этот вопрос на потом, чтобы посмотреть, что еще появится, но прямо сейчас это выглядит как лучший ответ.

3. Это хороший ответ, пока у меня не возникнут проблемы в этом сообществе из-за того, что я слишком рано пометил ответы как правильные. Так что теперь я предпочитаю подождать хотя бы день.

Ответ №2:

попробуйте сделать это так:

 =A2-QUOTIENT(A1, 5)*5
  

0

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

1. Это дало мне конечный результат. Я добавлю уточнение формулы, которую я в настоящее время использую для получения желаемого результата.

Ответ №3:

 =IFERROR(ARRAYFORMULA(TO_TEXT(JOIN("/", 
                   IF(ROW(INDIRECT("A1:A"amp;QUOTIENT(A1, 5) 1)),
 MMULT(TRANSPOSE((    ROW(INDIRECT("A2:A"amp;QUOTIENT(A1, 5) 2))<=
       TRANSPOSE(     ROW(INDIRECT("A2:A"amp;QUOTIENT(A1, 5) 2))))*
      {A2; TRANSPOSE(SPLIT(REPT(5*-1amp;"♣", QUOTIENT(A1, 5)), "♣"))}), 
 SIGN({A2; TRANSPOSE(SPLIT(REPT(5*-1amp;"♣", QUOTIENT(A1, 5)), "♣"))})^2), 
 IFERROR(1/0))))))
  

0