2013-11-01 59 views
0

所以我有一个excel文件充满了只有一列的10,000行数据。问题是它的格式不正确。列有一个模式:如何在Excel中将多行分割成多列?

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

,但问题是我需要的是“名称”,“地址”,“城市”,“国家”。我想知道是否有办法在Excel中执行此操作,或者可能使用脚本。任何帮助,将不胜感激。谢谢。

+1

如何存储值?有没有分隔符?提供更多信息并澄清您需要的内容(可能提供了完成后应该看起来的样本的示例)。 – Dan

回答

1

这里有一个办法在Excel中手动交叉表数据:

假定数据是在列A 输入以下forumlae:

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

现在选择C1并拖动右下角手柄正确的四个细胞。您应该看到显示的第一行数据为

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

1

如果您从sql获取数据...使用数据透视表将您的查询从垂直变为水平。现在你不必担心在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