Is there a better way to replicate a column array n times in Google Sheets

杀马特。学长 韩版系。学妹 提交于 2021-01-28 19:02:35

问题


I need to formulaic solution to copy a column range stacking on top of itself a given number of times. I found one ugly solution by incorporating a sequence function (to get 1,2,3...n) into an arrayformula for a text operation (Left). The Left operation does nothing but return the original value, but gives me the opportunity to include the sequence array.

There must be a better way to do this.

Problem: Write a formula that creates a column where a named column range is stacked on top of each other an arbitrary number of times. Must be a single formula as other users will need this to self adjust to a new length automatically.

=flatten( transpose( arrayformula( left( Column_Range,len( Column_Range ) + 0 * 
 sign( sequence( 1,Number_of_Times_To_Repeat ) ) ) ) ) )

回答1:


could be written as:

=ARRAYFORMULA(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*SIGN(SEQUENCE(1, C1))))))


or:

=INDEX(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*SIGN(SEQUENCE(1, C1))))))

or:

=INDEX(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*TRANSPOSE(ROW(INDIRECT("A1:A"&C1))^0)))))

or:

=INDEX(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*TRANSPOSE(SIGN(ROW(INDIRECT("A1:A"&C1))))))))

or:

=INDEX(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*SPLIT(REPT(1&"♀", C1), "♀")))))

or:

=INDEX(FLATTEN(TRANSPOSE(LEFT(A1:A5, LEN(A1:A5)*COLUMN(INDIRECT("A1:"&ADDRESS(1, C1)))^0))))

or:

=QUERY(FLATTEN(SPLIT(REPT("♀"&JOIN("♀", A1:A5), C1), "♀",,)), "offset 1")

or:

=FLATTEN(SPLIT(REPT(QUERY(A1:A5,,9^9)&" ", C1), " ",,))



回答2:


Solution 1

Here is a way without FLATTEN:

=ARRAYFORMULA(
  VLOOKUP(
    1 + MOD(
          SEQUENCE(C1 * MAX(ROW(A:A) * (A:A <> ""))) - 1,
          MAX(ROW(A:A) * (A:A <> ""))
        ),
    {ROW(A:A), A:A},
    2,
    0
  )
)

MAX(ROW(A:A) * (A:A <> "") inside ARRAYFORMULA just gives you the row number of the last non-empty cell. The rest is quite straightforward.


Solution 2

And here is a FLATTEN solution without LEFT:

=FLATTEN(
  ARRAYFORMULA(
    ARRAY_CONSTRAIN(
      TRANSPOSE(A:A),
      1,
      MAX(ROW(A:A) * (A:A <> ""))
    ) & IF(SEQUENCE(C1), "")
  )
)


来源:https://stackoverflow.com/questions/63307659/is-there-a-better-way-to-replicate-a-column-array-n-times-in-google-sheets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!