在 Excel 2007 年将垂直单元格中的数据移动到水平单元格
Move Data in Vertical Cells To Horizontal Cells in Excel 2007
我正在使用 excel 2007
我有一个 excel sheet 大约有 1200 条记录,结构如下...
最简单的方法是什么?
为了方便理解,加图:
我不知道你的 excel 电脑是否能够处理它,但你可以使用 [粘贴转置][1]。
您复制所有内容,(我的建议是使用新的电子表格,但您可以使用相同的电子表格),
然后你过去使用过去的变换
*编辑
用示例编辑问题后,您可能想使用过去的转换,然后使用数据透视 table
根据您的评论请求,这里有一个 Power Query
解决方案。
输入代码:
- Select 数据中的某个单元格 Table
Data => Get&Transform => from Table/Range
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下第 2 行中的 Table 名称
- 粘贴下面的 M 代码代替您看到的内容
- 将第 2 行中的 Table 名称更改回最初生成的名称。
算法
- 填写(向下填写)
District
和 Branch
列的空白行
Group
通过 District
和 Branch
- 对于每个组,将
President
、Secretary
和 Treasurer
的条目提取为分隔字符串。
- 创建适当的列名并将分隔的字符串拆分为单独的列。
如果你有更多的军官,或者每个 officer/position 有更多的项目,或者在你进入军官列之前有更多的列,那么修改代码以将其纳入其中应该相对简单帐户.
M码
let
Source = Excel.CurrentWorkbook(){[Name="Table16"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"District", Text.Type}, {"Branch", type text},
{"President", type text}, {"Secretary", type text}, {"Treasurer", type text}}),
#"Filled Down" = Table.FillDown(#"Changed Type",{"District", "Branch"}),
#"Grouped Rows" = Table.Group(#"Filled Down", {"District", "Branch"},{
{"President", each Text.Combine([President],";")},
{"Secretary", each Text.Combine([Secretary],";")},
{"Treasurer", each Text.Combine([Treasurer],";")}
}),
colHeaderSuffix = {"","Addr","Mobile"},
PresidentCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"President " & current}})),
#"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "President",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), PresidentCols),
SecretaryCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"Secretary " & current}})),
#"Split Column by Delimiter2" = Table.SplitColumn(#"Split Column by Delimiter", "Secretary",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), SecretaryCols),
TreasurerCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"Treasurer " & current}})),
#"Split Column by Delimiter3" = Table.SplitColumn(#"Split Column by Delimiter2", "Treasurer",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), TreasurerCols)
in
#"Split Column by Delimiter3"
原始数据
结果
公式使用如下(这里给出解决方案,方便以后的会员使用)
公式为:在 Treasurer Column 之后的空单元格中,
=If($a2="","",a2) // copy over next 4 columns to give the District, Branch, Pre name, address, mobile elements as =If($a2="","",a2), =If($b2="","",b2), =If($c2="","",c2), =If($c2="","",c3), =If($c2="","",c3), =If($c2="","",c4)
=if($d2="","",d2) // copy over next 2 columns for Secretary details like =if($d2="","",d2), =if($d2="","",d3), =if($d2="","",d4)
=if($g2="","",g2) // copy over next 2 columns for Treasurer details like =if($g2="","",g2), =if($g2="","",g3), =if($g2="","",g4)
现在 Select 所有新公式单元格 在 Treasurer 列之后的一行中 >> 向下拖动 直到所有记录.. ..
然后将所有这些复制到数据的底部
或者复制/粘贴特殊>>值到其他地方并且
然后按 District / Branch / Pres 排序删除空白行
我正在使用 excel 2007
我有一个 excel sheet 大约有 1200 条记录,结构如下...
最简单的方法是什么?
为了方便理解,加图:
我不知道你的 excel 电脑是否能够处理它,但你可以使用 [粘贴转置][1]。
您复制所有内容,(我的建议是使用新的电子表格,但您可以使用相同的电子表格), 然后你过去使用过去的变换
*编辑
用示例编辑问题后,您可能想使用过去的转换,然后使用数据透视 table
根据您的评论请求,这里有一个 Power Query
解决方案。
输入代码:
- Select 数据中的某个单元格 Table
Data => Get&Transform => from Table/Range
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下第 2 行中的 Table 名称
- 粘贴下面的 M 代码代替您看到的内容
- 将第 2 行中的 Table 名称更改回最初生成的名称。
算法
- 填写(向下填写)
District
和Branch
列的空白行 Group
通过District
和Branch
- 对于每个组,将
President
、Secretary
和Treasurer
的条目提取为分隔字符串。 - 创建适当的列名并将分隔的字符串拆分为单独的列。
如果你有更多的军官,或者每个 officer/position 有更多的项目,或者在你进入军官列之前有更多的列,那么修改代码以将其纳入其中应该相对简单帐户.
M码
let
Source = Excel.CurrentWorkbook(){[Name="Table16"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"District", Text.Type}, {"Branch", type text},
{"President", type text}, {"Secretary", type text}, {"Treasurer", type text}}),
#"Filled Down" = Table.FillDown(#"Changed Type",{"District", "Branch"}),
#"Grouped Rows" = Table.Group(#"Filled Down", {"District", "Branch"},{
{"President", each Text.Combine([President],";")},
{"Secretary", each Text.Combine([Secretary],";")},
{"Treasurer", each Text.Combine([Treasurer],";")}
}),
colHeaderSuffix = {"","Addr","Mobile"},
PresidentCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"President " & current}})),
#"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "President",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), PresidentCols),
SecretaryCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"Secretary " & current}})),
#"Split Column by Delimiter2" = Table.SplitColumn(#"Split Column by Delimiter", "Secretary",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), SecretaryCols),
TreasurerCols = List.Accumulate(colHeaderSuffix, {}, (state, current) => List.Combine({state, {"Treasurer " & current}})),
#"Split Column by Delimiter3" = Table.SplitColumn(#"Split Column by Delimiter2", "Treasurer",
Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), TreasurerCols)
in
#"Split Column by Delimiter3"
原始数据
结果
公式使用如下(这里给出解决方案,方便以后的会员使用)
公式为:在 Treasurer Column 之后的空单元格中,
=If($a2="","",a2) // copy over next 4 columns to give the District, Branch, Pre name, address, mobile elements as =If($a2="","",a2), =If($b2="","",b2), =If($c2="","",c2), =If($c2="","",c3), =If($c2="","",c3), =If($c2="","",c4)
=if($d2="","",d2) // copy over next 2 columns for Secretary details like =if($d2="","",d2), =if($d2="","",d3), =if($d2="","",d4)
=if($g2="","",g2) // copy over next 2 columns for Treasurer details like =if($g2="","",g2), =if($g2="","",g3), =if($g2="","",g4)
现在 Select 所有新公式单元格 在 Treasurer 列之后的一行中 >> 向下拖动 直到所有记录.. ..
然后将所有这些复制到数据的底部
或者复制/粘贴特殊>>值到其他地方并且
然后按 District / Branch / Pres 排序删除空白行