【问题标题】:How to split multiple rows into multiple columns in excel?如何在excel中将多行拆分为多列?
【发布时间】:2013-11-01 21:15:34
【问题描述】:

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

“姓名” “地址” “城市” “状态” “姓名” “地址” “城市” “状态” “姓名” ...

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

【问题讨论】:

  • 值是如何存储的?有分隔符吗?提供更多信息并阐明您需要什么(也许提供一个完成后应该是什么样子的示例)。

标签: sql excel


【解决方案1】:

这是一种在 Excel 中手动交叉表数据的方法:

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您从 sql 获取数据... 使用数据透视将您的查询从垂直更改为水平。现在您不必担心将其转换为 excel。看到这个post


    @Laurence 有一个很好的基于公式的解决方案,但是,如果您需要 vba,因为您一遍又一遍地使用来自 sql 的新数据转储执行此操作是一个 VBA 解决方案。

    从这里开始:


    使用了这个宏:

    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
    

    最后是这样的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多