如何在excel中将多行拆分为多个列?

时间:2013-11-01 21:15:35

标签: sql excel

所以我有一个excel文件,其中包含10,000行数据,这些数据只在一列上。问题是它的格式不正确。列的格式为:

"name"
"address"
"city"
"state"
"name"
"address"
"city"
"state"
"name"
...

但问题是我需要它是“name”“address”“city”“state”。我想知道是否有办法在Excel中执行此操作或使用脚本。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

以下是在Excel中手动交叉制表符数据的方法:

假设数据在A栏中。 输入以下论坛:

B1: =INT((ROW() - 1 ) * 4)
C1: =INDIRECT("A" & ($B1 + COLUMN() - COLUMN($B1)))

现在选择C1并将右下角手柄向右拖动四个单元格。您应该看到显示数据的第一行

最后选择B1F1。向下拖动右下角手柄。越往下,您将获得的行数越多。

答案 1 :(得分:1)

如果从sql获取数据...使用pivot将查询从垂直更改为水平。现在您不必担心在Excel中转​​换它。见post


@Laurence有一个很好的基于公式的解决方案,但是,如果你需要vba,因为你一遍又一遍地使用sql中的新数据转储这样做是一个VBA解决方案。

从此开始:

enter image description here


使用此宏:

Sub TransposeColA()
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    cntr = 1

    For rowNum = 1 To LastRow
        If Cells(rowNum, 1).Value <> "" Then
            Set rngA = Range(Cells(rowNum, 1), Cells(rowNum, 1).Offset(3, 0).Address)
            Range("B" & rowNum & ":E" & rowNum).Value = Application.Transpose(rngA)
            rngA.Delete
        Else
            Rows(rowNum).Delete Shift:=xlUp
            rowNum = rowNum - 1
            cntr = cntr + 1
            If cntr = LastRow Then Exit Sub
        End If
    Next rowNum
End Sub

结束了这个:

enter image description here