【问题标题】:Convert groups of rows to a single row of columns将行组转换为单行列
【发布时间】:2013-10-24 01:32:44
【问题描述】:

我有一个 Excel 电子表格,其中以两列格式重复这样的行:

编号 123 名称 xyx 位置 dfff 自定义 sdfd 编号 124 名称 xyeex 位置影响 自定义 sdfdee

我的数据是一致的。每个数据部分包含 4 行,后跟 1 个空白行。我最终在 VB 中编写了一个宏来完成这项工作,但我想知道是否有更内置的方法

我想得到:

ID 名称 位置 自定义 123 ... 124 ...

所以每组行需要进入一行。即使我可以部分进入 一些单独的行格式,我可以应用更多的公式来得到我想要的 但真正的问题是如何将一组重复的行组合成一行。

【问题讨论】:

  • 我的数据是一致的。每个数据部分包含 4 行,后跟 1 个空白行。我最终在 VB 中编写了一个宏来完成这项工作,但我想知道是否有更内置的方法
  • dgorti,您发现发布的内容有用吗?为了社区的利益,请发布反馈(一个小动作)。

标签: excel rows


【解决方案1】:

使用this general answer的方法1如何仅使用公式在行、列和矩阵范围之间进行转换, 假设您的数据以 A1 开头(使用列 A:B),并且您的目标范围是列 D:G,请输入 D2 或者

=INDEX($B$1:$B$100,(ROW()-ROW($D$2))*5+(COLUMN()-COLUMN($D$2)+1),1)

=OFFSET($B$1,(ROW()-ROW($D$2))*5+(COLUMN()-COLUMN($D$2)),0)

向下和向左复制。

【讨论】:

    【解决方案2】:

    除了有人为您编写代码之外,最简单的方法可能是将您的右侧列复制到四列,并从第一个副本中删除顶部单元格(上移),从第二个副本中删除顶部两个单元格,然后很快。然后过滤您的左侧列,选择并删除除显示ID 之外的所有行。在顶部插入一行,并使用“粘贴特殊转置”将一组行标签复制到右侧列上方的单元格中。然后删除您的第一列。

    虽然既不使用代码也不使用公式,但这对于大型数据集是可行的,并且可以说对于适度的重复。

    或者,将 RH 列作为无格式文本复制到 Word 中,将成对的 pilcrow 替换为单列(^p^p^p),转换为 4 列表并复制回 Excel。

    【讨论】:

      【解决方案3】:

      我已经回答过类似的问题here

      假设您的数据以A1 开始(使用列A:B),并且您的目标范围是列D:G,请输入

      D2: =INDEX($B$1:$B$100,ROW()*5-9,1)
      E2: =INDEX($B$1:$B$100,ROW()*5-8,1)
      F2: =INDEX($B$1:$B$100,ROW()*5-7,1)
      G2: =INDEX($B$1:$B$100,ROW()*5-6,1)
      

      抄下来。 如果重新定位源/目标范围,您应该能够适应这一点。

      【讨论】:

        【解决方案4】:

        如果您想快速简单地完成这项工作,有一个 Excel 插件可以让您在几秒钟内完成此操作,名为 Kutools for Excel(商业 [39 美元],但可以免费试用)。

        使用变换范围函数:

        来源:https://www.extendoffice.com/documents/excel/3360-excel-transpose-every-5-rows.html

        【讨论】:

          【解决方案5】:

          这样的?

          Sub trans5x()
              Set src = Sheets("sheet1") 'source data
              Set dst = Sheets("sheet2") 'dstination
              lr = src.Cells(Rows.Count, 1).End(xlUp).Row
              fr = 1 'first row of source data
              pr = 1 'first row of destination
              For i = fr To lr Step 5
                  src.Cells(i, 1).Resize(5).Copy
                  dst.Cells(pr, 1).PasteSpecial Paste:=xlPasteAll, Transpose:=True
                  pr = pr + 1
              Next
              dst.Range("A1:D1").EntireColumn.AutoFit 'resizes cols in destination sheet
          End Sub
          

          【讨论】:

            【解决方案6】:

            这个问题由来已久,我不知道它是否仍然对某人有帮助。 我试图解决类似的问题,唯一的区别是 ID 位于每一行的第二列中:

            Location1  1
            Name1      1
            Address1   1
            Location2  2
            Name2      2
            Address2   2
            

            我最终在 Excel 中使用了 Power Query。这个视频https://youtu.be/nJ7LzwiSwnw 帮助我将原始表转换为 2 列,数据与分隔符连接:

            1 Location1;Name1;Address1
            2 Location2;Name2;Address2
            

            拆分第二列是一件小事

            【讨论】:

              猜你喜欢
              • 2021-04-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-08-02
              • 1970-01-01
              • 2023-03-14
              • 2013-07-02
              相关资源
              最近更新 更多