3

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

编号 123
名称 xyx
位置 dfff
自定义 sdfd

编号 124
名称 xyeex
位置影响
自定义sdfdee

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

我想得到:

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

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

4

6 回答 6

3

使用这个关于如何仅使用公式在行、列和矩阵范围之间转换的一般答案的方法 1 ,假设您的数据开始于(使用列),并且您的目标范围是列,输入任一A1A:BD:GD2

=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)

向下和向左复制。

于 2015-01-23T10:52:54.030 回答
0

我已经在这里回答了类似的问题。

假设您的数据开始于A1(使用 columns A:B),并且您的目标范围是 columns 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)

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

于 2015-01-23T06:23:33.560 回答
0

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

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

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

于 2013-10-24T01:59:13.740 回答
0

这个问题有很长的历史,我不知道它是否仍然对某人有帮助。我试图解决类似的问题,唯一的区别是 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

拆分第二列是一个琐事

于 2020-05-13T20:06:27.567 回答
0

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

使用变换范围函数:

在此处输入图像描述

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

于 2018-07-17T13:27:04.720 回答
0

像这样的东西?

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
于 2019-02-13T01:27:59.543 回答