如何将列转换为Excel中的行

时间:2013-02-27 18:17:51

标签: excel excel-vba vba

我有以下Excel工作表:

   A
1 foo
2 bar
3 baz
4 bam

(实际上,这个专栏更长,更长时间用手工转发而不是一个选项)。如何将此表格转换为

   A   B   C   D
1 foo bar baz bam

我已经尝试过数据透视表功能,但无法获得我想要的输出。我也可以写一个(php)脚本来读取和转换Excel,但我无法想象这是在Excel中不容易完成的事情。但是,我一直无法找到这个问题的答案。你能帮忙吗?

3 个答案:

答案 0 :(得分:7)

有两种简单的非编程方式:

  1. 复制数据并在目标位置使用选择性粘贴 - > 转置
  2. 应用TRANSPOSE工作表功能:选择转置尺寸的范围(在您的示例中为1行x 4列,然后输入=TRANSPOSE(A1:A4)。您需要将其作为数组公式输入,即按< KBD>控制 - - 输入
  3. 如果出于某种原因需要通过代码执行此操作,则此VBA代码将执行:

    Sub CopyTransposed(rngSource As Range, rngTargetCell As Range)
        rngTargetCell.Resize(rngSource.Columns.Count, rngSource.Rows.Count).Value = _
            Application.WorksheetFunction.Transpose(rngSource)
    End Sub
    

    你可以简单地这样称呼它:

    CopyTransposed [A1:A4], [C1] 
    

    或更明确

    CopyTransposed Sheets("SourceSheet").Range("A1:A4"),Sheets("TargetSheet").Range("C1")
    

答案 1 :(得分:3)

如果您只需要转置数据(即没有格式),请尝试使用

Sub zx()
    Dim rng As Range
    Dim dat As Variant

    With ActiveSheet ' can be any sheet
        Set rng = .[A1:A5] ' get refernce to your data, by any means
        dat = rng ' copy data to array
        rng.Clear ' clear old data

        ' paste transposed data
        .Range(rng.Cells(1, 1), Cells(rng.Row, rng.Rows.Count)) = Application.Transpose(dat)
    End With
End Sub

答案 2 :(得分:0)

Ctrl + C使用“选择性粘贴”进行复制和粘贴。单击对话框上的转置。

这会将其粘贴为值....