在MS Excel中将单个列中的值拆分为不同的单个列

j1dl9f46  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(127)

需要将父列中可用的值拆分为三个单独的列,如图所示。

mwg9r5ms

mwg9r5ms1#

使用MAKEARRAY的一个简洁的替代方案:

=LET(n,3,A,A1:A9,m,ROWS(A),MAKEARRAY(m,n,
 LAMBDA(r,c,IF(c=MOD(r-1,n)+1,INDEX(A,r),""))))

或者 * 甚至更短 *,不使用MAKEARRAY可能更有效,因为它不使用LAMBDA函数:

=LET(n,3,A,A1:A9,m,ROWS(A),IF(N(MOD(SEQUENCE(m,,0),n)+1=SEQUENCE(,n))=1,A,""))

其中MOD(SEQUENCE(m,,0),n)+1生成序列:{1;2;3;1;2;3...;1;2;3}直到m,例如n=3。它实际上是第一个公式中MOD(r-1,n)+1的数组版本。

N(MOD(SEQUENCE(m,,0),n)+1=SEQUENCE(,n))

垂直堆叠n-乘以单位矩阵(i.例如MUNIT(n)),类似于REDUCE/VSTACK方法,见下文,但不使用LAMBDA函数:
下面是输出(对于第一种方法):

使用REDUCE/VSTACK模式(1)的另一替代方案对于大数据集可能效率较低(当n是一个小数字时,即它需要大量的迭代),但可能更容易理解:

=LET(n,3,A,A1:A9,u,MUNIT(n), x,REDUCE(u,SEQUENCE(n-1),
 LAMBDA(ac,_,VSTACK(ac,u))),IF(x=1,A,""))

(1)检查我对以下问题的回答:如何将Excel中表格从垂直转换为水平,但长度不同。

lnxxn5zx

lnxxn5zx2#

假设A1:A9中的条目:

=LET(
    λ,3,
    ζ,A1:A9,
    IF(
        MAKEARRAY(ROWS(ζ),λ,LAMBDA(α,β,INDEX(MUNIT(λ),1+MOD(α,λ),1+MOD(β,λ)))),
        IF(SEQUENCE(,λ),ζ),
        ""
    )
)

修改λ的初始定义(这里是3),以确定在输出中返回的列数。

guykilcj

guykilcj3#

列表从A3开始,相应修改

Sub CutAndMove()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    For i = 4 To lastRow Step 3
        Range("A" & i).Cut Destination:=Range("B" & i)
    Next i
    
    For i = 5 To lastRow Step 3
        Range("A" & i).Cut Destination:=Range("C" & i)
    Next i
End Sub

相关问题