在谷歌电子表格中将对角线转置为行?

3

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

A1 B2 C3 D4

我找到了一个函数,它可以返回一列数据,但是我不知道如何对行中的值进行排序。
=INDEX(A1:D1,,ROWS($1:1))

对于这个问题,当然可以使用 TRANSPOSE 函数解决,但我希望有一种更加优雅的方法。谢谢!

4个回答

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:


0

获取所有对角线:

=排序({ 展平(数组公式(行(A5:E9) + 列(A5:E9))), 展平(A5:E9) })

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

来源: https://t.me/google_spreadsheets_chat/159476


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


0
这样怎么样,当你拖动它时,它会沿着对角线向下移动。
=index($A$1:$D$4,columns($A1:A1),columns($A1:A1))

或者说你原来的公式等价于

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接