根据excel中的单元格值将单行拆分为多行

时间:2014-10-14 14:08:14

标签: excel excel-vba excel-formula excel-2010 vba

我在excel中有一行数据。数据大约是5000多个值。

我想将这一行拆分成多行。下面是相同的例子。

我的单行包含如下数据:1 2 3 4 5 A 1 2 4 5 9 5 9 A 2 1 4 A等......

我想要在每个" A"之后拆分这一行。达到的价值。输出如下。

1 2 3 4 5

A 1 2 4 5 9 5 9

A 2 1 4

等等......

some1可以帮我解决这个问题吗?宏对我很好。此外,我还拥有5000+值等大量数据。

4 个答案:

答案 0 :(得分:1)

这应该可以胜任你的工作。考虑到您的数据在Sheet1中并且输出是在工作表Sheet2中生成的。

 Sub pSplitData()

        Dim rngColLoop          As Range
        Dim rngSheet1           As Range
        Dim wksSheet2           As Worksheet
        Dim intColCounter       As Integer
        Dim intRowCounter       As Integer

        'Consider the data to be in First row of Sheet1
        With Worksheets("Sheet1")
            Set rngSheet1 = .Range(.Range("A1"), .Range("A1").End(xlToRight))
        End With

        Set wksSheet2 = Worksheets("Sheet2")
        intRowCounter = 1
        intColCounter = 0

        'Clear previous output
        wksSheet2.Range("A1").CurrentRegion.Clear

        'Loop through and create output in Sheet2
        With rngSheet1
            For Each rngColLoop In .Columns
                If Trim(rngColLoop) <> "" Then
                    If UCase(Trim(rngColLoop)) <> "A" Then
                        intColCounter = intColCounter + 1
                        wksSheet2.Cells(intRowCounter, intColCounter) = rngColLoop
                    ElseIf UCase(Trim(rngColLoop)) = "A" Then
                        intRowCounter = intRowCounter + 1
                        intColCounter = 1
                        wksSheet2.Cells(intRowCounter, intColCounter) = rngColLoop
                    End If
                End If
            Next rngColLoop
        End With

        Set rngColLoop = Nothing
        Set rngSheet1 = Nothing
        Set wksSheet2 = Nothing

End Sub

答案 1 :(得分:0)

尝试使用Text to Columns并使用A作为分隔符。您必须将A添加回结果单元格。

答案 2 :(得分:0)

如果您的数据位于单个单元格中,例如,单元格A1,那么您可以使用vba的拆分将所有单个部分存储在数组中,并使用字母A进行拆分。

myArray = Split(Cells(1, 1), "A")

在您的示例中,myArray(0) = 1 2 3 4 5myArray(1) = 1 2 4 9 5

因此,如果每个元素都需要在自己的行中,那么可以将A连接到前面,就像这样

cells(2, 1) = "A" & myArray(0)
cells(3, 1) = "A" & myArray(1)

等等。

答案 3 :(得分:0)

如果您的数据是这样的:

      A    ||  B   ||  C     ||  D   ||
-----------------------------------------
1 ||  one  || two  || three  || four ||
2 ||

然后将=TRANSPOSE(A1:D1)放入A2,并使用Ctrl + shift + enter进行确认,这将产生如下公式:{=TRANSPOSE(A1:D1)}

,结果如下:

      A    ||  B   ||  C     ||  D   ||
-----------------------------------------
1 ||  one  || two  || three  || four ||
2 ||  one
3 ||  two
4 ||  three
5 ||  four

或者您正在进行一次性操作后,您可以随时:选择 - &gt;复制选择空单元格 - &gt;粘贴特殊 - &gt;勾选转置