尝试将数据行转换为 4 列数据...在 Excel 365 中稍作改动

尝试将数据行转换为 4 列数据...在 Excel 365 中稍作改动

我正在尝试将数据行转换为 4 列数据。

所有数据目前都在 1 列和数万行中。每个用户通常有 4 行相关数据:

  • 用户名1
  • ID1
  • 电子邮件1
  • 最后登录1
  • 用户名2
  • ID2
  • 电子邮件2
  • 最后登录2
  • ETC...

但是,如果用户从未登录过,则没有第 4 行,下一行将直接延续。例如:

  • 用户名3
  • ID3
  • 电子邮件3
  • 最后登录3
  • 用户名4
  • ID4
  • 电子邮件4
  • 用户名5
  • ID5
  • 电子邮件5
  • 最后登录5

(查看用户 4 没有第 4 行 LastLogIn)

如果全部用户恰好有 4 行与之关联,我可以很容易地使用以下函数将所有行变成 4 列:

=INDEX($A:$A,ROW(A1)*4-4+COLUMN(A1))

但有时缺少第 4 行让我感到困惑。有人知道我该怎么做吗:

  1. 抓住第一行并将其变成第 1 列。
  2. 抓住第二行并将其变成第二列。
  3. 抓住第 3 行并将其变成第 3 列。
  4. 如果第 4 行以“Last”开头,则抓取该行并将其转入第 4 列,如果“Last”不存在,则第 4 列 =“NEVER”。

答案1

另一个针对较旧版本的 Excel 的建议。我曾使用过 LET 函数,但很容易以延长公式为代价将其消除。
公式C2可以复制到D2:E2。公式F2不同。
分配
公式C2和版权归E2

=INDEX($A:$A, 4*COUNTA(C$1:C1)-COUNTIF($F$1:$F1, "NEVER")+COLUMN(A1))&""

公式F2

=LET(test, INDEX($A:$A, 4*COUNTA(F$1:F1)-COUNTIF($F$1:$F1, "NEVER")+COLUMN(D1)),
 IF(LEFT(test,4)="Last", test, IF(test="", "", "NEVER")))

然后C2:F2按要求抄下来。

答案2

使用 Microsoft 365,您可以使用:

=LET(u,FILTER(ROW(A1:A19),LEFT(A1:A19)="U"),MAKEARRAY(ROWS(u),4,LAMBDA(r,c,LET(x,INDEX(A:A,INDEX(u,r)+c-1),IF(c<4,x,IF(LEFT(x)="U","NEVER",x))))))

或者

=REDUCE({"Username","ID","Email","LastLogin"},FILTER(ROW(A1:A19),LEFT(A1:A19)="U"),LAMBDA(x,y,LET(z,TOROW(INDEX(A:A,SEQUENCE(4,,y))),IFNA(VSTACK(x,TOROW(IF(LEFT(z)={"U","I","E","L"},z,NA()),2)),"NEVER"))))

在此处输入图片描述

相关内容