将具有层次结构的分隔值转换为单独的分配

将具有层次结构的分隔值转换为单独的分配

我有一份按层级划分的用户列表及其指定级别。我希望每个用户都单独占一行,但保留原始用户所指定的级别。

这是我一开始的:

我想以此作为结束:

用户 1级
[电子邮件保护] 区域 1
[电子邮件保护] 区域 1
[电子邮件保护] 区域 1

我有数百行和多个级别的层次结构,因此仅将文本转换为列和 c/p 就太耗时了。

如果可能的话,我更喜欢无 vba 的解决方案。

答案1

使用 Office 365:

=LET(
    us,A2:A201,
    hr,B2:D201,
    ttl,A1:D1,
    VSTACK(ttl,DROP(REDUCE("",us&"|"&BYROW(hr,LAMBDA(z,TEXTJOIN("{",FALSE,z))),LAMBDA(a,b,LET(c,TEXTAFTER(b,"|"),VSTACK(a,HSTACK(TEXTSPLIT(TEXTBEFORE(b,"|"),,";"),DROP(TEXTSPLIT(REPT(c&"}",ROWS(TEXTSPLIT(b,,";"))),"{","}"),-1)))))),1)))

;基本上,它会在(用户)范围内拆分文本us。然后它会在(层次结构)范围内按行重复值hr。然后它会水平堆叠它们。

然后 REDUCE 会垂直堆叠每行的输出。最后我们堆叠在ttl(标题)范围内。

在此处输入图片描述

答案2

  1. 选择数据范围并进入INSERT菜单

在此处输入图片描述

  1. 根据情况进行选择TABLE和选中/取消选中。My Table Has Headers

在此处输入图片描述

  1. 选择您的数据范围,进入DATA菜单并单击From Table/Range

在此处输入图片描述

  1. 在 中Power Query Editor,选择column1,单击Split Column,然后单击By Delimiter

在此处输入图片描述

  1. 输入;您的自定义分隔符并单击okay

在此处输入图片描述

  1. 选择Column2下拉菜单Unpivot Columns,然后选择Unpivot Other Columns

在此处输入图片描述

  1. 选择Attribute列。

在此处输入图片描述

  1. 右键单击列并选择Remove

在此处输入图片描述

  1. HOME菜单中,单击Close and Load

在此处输入图片描述

相关内容