如何将列中的数据转置为行?
如果数据是:
Joe
some city
some state
Bob
no city
no state
我用特殊粘贴»转置,我得到
Joe some city some state Bob no city no state
我想要的是:
Joe some city some state
Bob no city no state
我不懂 VBA。
答案1
今天早上我们将向你学习一些 VBA,你会感觉很好!穿上你的火箭靴,准备启航!
如果所有内容都在 A 列中,此宏将为您执行此操作
点击Alt + F11打开 VBA 编辑器。右键单击insert - module
。将下面的代码粘贴到模块中,然后debug - compile project
点击F5运行。很简单。
Sub transposedelete()
Dim rownum As Long
Dim colnum As Long
Dim data, result
colnum = 1
Application.ScreenUpdating = False
'check if the data on the sheet start where the code expects it
If Range("a1") = "" Then Exit Sub
' define data range
With Range("a1", Cells(Rows.Count, "a").End(xlUp)).Resize(, 2)
data = .Value
numrows = UBound(data)
'loop it
For rownum = 2 To numrows
Range((Cells(rownum, colnum)), (Cells(rownum + 1, colnum))).Copy
' transpose
Cells(rownum - 1, colnum + 1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'delete rows (this could be cleaner)
Rows(rownum).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Rows(rownum).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Next
End With
Application.ScreenUpdating = True
End Sub
简单如1、2、3:
1.
2.
3.
现在看看这并不难或者是不是有点吓人?现在你有一个绝招了!学习真的很有趣!
答案2
更新:Excel 2007 及更高版本实际上确实具有单列多行功能。点击这里阅读。由于转置功能没有达到您想要的效果,请参见下文:
为了使转置按您希望的方式工作,您的原始数据需要按如下方式排列:
Joe Bob
city1 city2
state1 state2
转置将行变为列,反之亦然。您的示例中的信息格式是一列,但 Excel 将其变为一行。它无法知道您希望将包含六个项目的列视为两个块,每个块包含三个项目。
答案3
本答案使用的数据来自如何将行格式的数据转换为列格式?,因为与此问题重复而被关闭。因此,这个答案做回答这个问题,并做一些简单的修改(即忽略这个答案中关于数据标签的部分)。
首先,我假设你的数据是你出现说的是:
创建一个新工作表并输入与三个数据标签相对应的列标题:
A1:A3
(您可以通过从复制单元格Sheet1
并转置它们来实现这一点,但是,对于只有三个的单元格,手动输入它们可能更容易。)现在,请注意,每次在 上向右移动一个单元格(即一列)时Sheet2
,都相当于在 上向下移动一行Sheet1
。并且每次在 上向下移动一行时Sheet2
,都相当于在 上向下移动三行Sheet1
。因此,猜测这=ROW()*3 + COLUMN()
可能是一个有用的公式,并将其输入到单元格中A2:C4
:
请注意,值以我们希望的方式增长。但是我们想Sheet2!A2
从中获取它的值Sheet1!A1
,所以让我们减去 7 并使用结果作为偏移量。输入
=OFFSET(Sheet1!$A$1, ROW()*3+COLUMN()-7, 0)
进入细胞A2:C4
:
这是您想要的数据,但仍然附加了数据标签。因此,要解决此问题,请将公式更改为
=SUBSTITUTE(OFFSET(Sheet1!$A$1, ROW()*3+COLUMN()-7, 0), A$1 & ": ", "")
从单元格数据中去除标签(从当前列的第 1 行开始):
然后您可以复制并粘贴值。