将对角线转置为Google电子表格中的行?

时间:2017-01-19 12:01:30

标签: arrays google-sheets transpose

我试图找到一个能够返回数组A1:D4的对角线的公式,如下所示: A1 B2 C3 D4

我找到了这个,它会返回一列,但我无法找到如何在一行中对这些值进行排序。

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

(粘贴在下面的栏目中)

对结果的一个TRANSPOSE当然可以做到这一点,但是我会欣赏一些稍微优雅的东西。谢谢!

4 个答案:

答案 0 :(得分:1)

如果你使用你提到的确切范围(A1:D4),那么这应该有效

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

(无需填写。)

Example 1:

如果您想获得任何范围的对角线值(此处:B11:E14),请尝试

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

Example 2:

答案 1 :(得分:0)

这个怎么样,然后当你拉过它时会沿着对角线

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

或原始公式的等价物

=index(A1:A4,COLUMNS($A1:A1))

答案 2 :(得分:0)

使用未记录的FLATTEN救生功能:

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

enter image description here

如果范围不在左上角:

=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(例如,可以是命名范围)作为参数。

enter image description here

答案 3 :(得分:0)

获取所有对角线:

=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