我有一个Excel电子表格,以两列格式重复这样的行:
ID 123 Name xyx Location dfff custom sdfd ID 124 Name xyeeex Location dfeeff custom sdfdee
我的数据是一致的。每个数据部分包含4行,后跟1个空行。我最终在VB中编写了一个宏来完成这项工作,但我想知道是否有更内置的方式
我想得到:
ID Name Location Custom 123 ... 124 ...
因此每组行都需要进入一行。即使我可以部分进入 一些单独的行格式,我可以应用更多的公式来达到我想要的 但真正的问题是如何将一组重复的行组合成一行。
答案 0 :(得分:2)
使用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)
向下复制到左侧。
答案 1 :(得分:0)
除了让某人为你编写代码之外,最简单的方法可能是将右侧列复制到四列并从第一个副本中删除顶部单元格(向上移位),从第二个副本中删除前两个单元格,等等。然后过滤左侧列,选择并删除除ID
之外的所有行。在顶部插入一行,并将一组行标签与Paste Special Transpose复制到右侧列上方的单元格中。然后删除第一列。
虽然既不使用代码也不使用公式,但这对于大型数据集是可行的,并且可以说是适度重复。
或者,将RH列复制为Word作为无格式文本,将成对的pilcrows替换为单个(^p^p
和^p
),转换为4列表并复制回Excel。
答案 2 :(得分:0)
我已经回答了类似的问题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)
复制下来。 如果重新定位源/目标范围,您应该能够调整它。
答案 3 :(得分:0)
如果您想快速简单地完成此操作,可以使用Excel插件,该插件可以在几秒钟内完成操作,称为 Kutools for Excel (商业[$ 39],但完全免费)试用版)。
使用变换范围功能:
来源:https://www.extendoffice.com/documents/excel/3360-excel-transpose-every-5-rows.html
答案 4 :(得分: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
答案 5 :(得分: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
第二列是琐事