如何将列中的数据转置为行?

如何将列中的数据转置为行?

如何将列中的数据转置为行?

如果数据是:

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 行开始):

                                               

然后您可以复制并粘贴值。

相关内容