Перенести диагональ в строку в таблице Google?

Я попытался найти формулу, которая вернула бы диагональ массива A1:D4 следующим образом:

A1 B2 C3 D4

Я нашел этот, который возвращает столбец, но я не могу понять, как вместо этого упорядочить значения в строке.

=INDEX(A1:D1,,ROWS($1:1))

(вставьте в столбцы ниже)

TRANSPOSE на результате, конечно, поможет, но я был бы признателен за что-нибудь более элегантное. Спасибо!


person nickros    schedule 19.01.2017    source источник


Ответы (4)


Если вы используете точный диапазон, который вы упомянули (A1: D4), это должно сработать

=ARRAYFORMULA(TRIM(QUERY(IF(ROW(A1:D4)=COLUMN(A1:D4), A1:D4,),,ROWS(A1:A4))))

(Заполнять не нужно.)

Пример 1:

Если вы хотите получить значения диагонали любого диапазона (здесь: B11: E14), попробуйте

=ARRAYFORMULA(TRIM(QUERY(IF(ROW(B11:E14)-ROW(B11)+1=COLUMN(B11:E11)-COLUMN(B11)+1, B11:E14,),,ROWS(B11:B14))))

Пример 2:

person JPV    schedule 19.01.2017

Как насчет этого, тогда когда вы его потянете, он будет спускаться по диагонали

=index($A$1:$D$4,columns($A1:A1),columns($A1:A1))

или эквивалент вашей исходной формулы будет

=index(A1:A4,COLUMNS($A1:A1))
person Tom Sharpe    schedule 19.01.2017

Использование недокументированного _ 1_ функция спасения жизни:

=TRANSPOSE(
  QUERY(
    FLATTEN(
      ARRAYFORMULA(
        IF(COLUMN(A1:D4) = ROW(A1:D4), A1:D4, "")
      )
    ),
    "WHERE Col1 IS NOT NULL",
    0
  )
)

введите здесь описание изображения

И если диапазон находится не в верхнем левом углу:

=TRANSPOSE(
  QUERY(
    FLATTEN(
      ARRAYFORMULA(
        IF(
          COLUMN(F15:I18) - COLUMN(INDEX(F15:I18, 1, 1)) + 1 = ROW(F15:I18) - ROW(INDEX(F15:I18, 1, 1)) + 1,
            F15:I18,
            ""
        )
      )
    ),
    "WHERE Col1 IS NOT NULL",
    0
  )
)

Умышленно используется INDEX(F15:I18, 1, 1) вместо просто F15, чтобы в качестве параметра имелся только диапазон F15:I18 (например, это мог быть именованный диапазон).

введите здесь описание изображения

person kishkin    schedule 17.06.2020

получить все диагонали:

=SORT({ FLATTEN(ARRAYFORMULA(ROW(A5:E9) + COLUMN(A5:E9))), FLATTEN(A5:E9) })

=SORT({ FLATTEN(ARRAYFORMULA(ROW(A5:E9) - COLUMN(A5:E9))), FLATTEN(A5:E9) })

Источник: https://t.me/google_spreadsheets_chat/159476.

person Max Makhrov    schedule 29.01.2021