【问题标题】:Move Data in Vertical Cells To Horizontal Cells in Excel 2007在 Excel 2007 中将垂直单元格中的数据移动到水平单元格
【发布时间】:2021-05-11 08:05:12
【问题描述】:

我正在使用 excel 2007

我有一个包含大约 1200 条记录的 Excel 表,其结构如下...

什么是最简单的方法?

为了便于理解,添加图片:

【问题讨论】:

  • 我认为你可以删除文本示例,只留下图像
  • 除非您想手动完成,否则我认为 Excel 2007 中的 最简单 将是 VBA 解决方案。或者您可以升级您的程序并使用 Power Query。
  • @RonRosenfeld 我可以提供一个示例 VBA 解决方案吗?因为我不是 Excel 方面的专家..
  • @RonRosenfeld 或者如何为我的这个问题使用 Power Query? (我可以在我朋友的笔记本电脑上试一试,因为他有装有 MS Office 2013 的笔记本电脑)

标签: excel excel-formula excel-2007


【解决方案1】:

根据您的评论请求,这是一个Power Query 解决方案。

输入代码:

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下第 2 行中的表 Name
  • 粘贴下面的 M 代码代替您看到的内容
  • 将第 2 行中的表名称更改回最初生成的名称。

算法

  • 填写(填写)DistrictBranch 列的空白行
  • Group DistrictBranch
  • 对于每个组,将PresidentSecretaryTreasurer 的条目提取为分隔字符串。
  • 创建适当的列名并将分隔的字符串拆分为单独的列。

如果你有更多的军官,或者每个军官/职位有更多的物品,或者在你到达军官列之前有更多的列,那么修改代码以考虑到这一点应该相对简单。

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"

原始数据

结果

【讨论】:

  • 感谢您提供出色的解决方案并给予重要的时间......我按照我的回答解决了它......
【解决方案2】:

公式如下(这里给出解决方案,以便以后的成员可以使用它)

公式为:在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 All New Formula Cells在Treasurer列之后的一行中>> Drag Down Till All Records....

然后将所有这些复制到数据的底部

复制/粘贴特殊>>值到其他地方,然后

然后按District / Branch / Pres排序以删除空白行

【讨论】:

    【解决方案3】:

    我不知道你的 excel 电脑是否能够处理它,但你可以使用 [Paste Transpose][1]。

    您复制所有内容,(我的建议,转到新的电子表格,但您可以使用相同的电子表格), 然后你过去它使用过去的变换

    *编辑

    使用示例编辑问题后,您可能希望使用过去的转换,然后使用数据透视表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2015-07-31
      • 2018-09-19
      • 2022-11-04
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多