答案1
您可以在最新版本的O365中使用此公式:
=LET(d,B2:D6,TOROW(FILTER(d,TAKE(d,,1)<>"")))
编辑:这是使用 Power Query 的版本:
将光标放在表格中的任意位置并使用 Ctrl+T,将原始数据转换为表格。
转到“表设计”选项卡,将表名更改为“数据”(“表名”框位于“表设计”选项卡的左侧)。
然后使用数据>获取数据>从其他来源>空白查询。
这将打开 Power Query 编辑器。
然后使用“主页”>“高级编辑器”,并用以下代码替换那里的代码:
let
Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
//remove blank rows
RemoveNulls = Table.SelectRows(Source,each [Assigned To] <> null)[[Assigned To],[#"Item #"],[#"Serial #"]],
//convert each record to a sub-list of a list
ListOfLists = List.Transform(Table.ToRecords(RemoveNulls),each Record.ToList(_)),
//combine the sub-lists into a single list of values
Combine = List.Combine(ListOfLists),
//convert the list into a one-column table
AsTable = Table.Transpose(Table.FromColumns({Combine})),
//the original column headers
Header = Table.ColumnNames(RemoveNulls),
//convert the column headers to repeats of the original
ChangeTableHeader = Table.TransformColumnNames(
AsTable,
each
let
num = Number.From(Text.Replace(_,"Column","")),
calc = Number.RoundDown((num - 1) / List.Count(Header)) + 1
in Header{Number.Mod(num-1,3)} & " " & Text.From(calc)
)
in
ChangeTableHeader
请注意,Power Query 中不可能有重复的列标题,因此我在每个列标题后都添加了一个序列号。
最后,使用 Power Query 功能区上的“主页”>“关闭并加载”。结果将如下所示: