Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将文本转换为行而不是文本转换为列_Excel_Vba_Excel 2010 - Fatal编程技术网

Excel 将文本转换为行而不是文本转换为列

Excel 将文本转换为行而不是文本转换为列,excel,vba,excel-2010,Excel,Vba,Excel 2010,我有一个使用^符号作为分隔符的文本字符串 我需要将文本分成新行,而不是新列 我需要创建新行,以避免覆盖它下面的下一行数据 这在不使用宏的情况下是可能的吗?我并不反对使用它,我只是不知道从哪里开始写 下面是一些样本数据的图片。顶部是如何列出的,底部(黄色)是我想要的 在Windows 7 Pro上使用Excel 2010 可以尝试以下方法: Sub reArrange() Dim inFirstRng As Range Dim inRng As Range Dim in

我有一个使用
^
符号作为分隔符的文本字符串

我需要将文本分成新行,而不是新列

我需要创建新行,以避免覆盖它下面的下一行数据

这在不使用宏的情况下是可能的吗?我并不反对使用它,我只是不知道从哪里开始写

下面是一些样本数据的图片。顶部是如何列出的,底部(黄色)是我想要的


在Windows 7 Pro上使用Excel 2010

可以尝试以下方法:

Sub reArrange()

    Dim inFirstRng As Range
    Dim inRng As Range
    Dim inCur As Variant
    Dim outFirstRng As Range
    Dim outCurRng As Range
    Dim ws As Worksheet

    'CHANGE ARGUMENT TO YOUR SHEET NAME
    Set ws = Worksheets("Sheet2")

    With ws
        'CHANGE ARGUMENT TO WHATEVER THE FIRST CELL OR YOUR DATA INPUT IS IN COLUMN A
        Set inFirstRng = .Range("A3")
        Set inRng = .Range(inFirstRng, inFirstRng.End(xlDown))
        'CHANGE ARGUMENT TO WHATEVER THE FIRST CELL OR YOUR DATA OUTPUT IS IN COLUMN A
        Set outFirstRng = .Range("A9")
        Set outCurRng = outFirstRng
    End With

    For Each cell In inRng.Cells

        inCur = WorksheetFunction.Transpose(Split(cell.Value, "^"))
        outCurRng.Resize(UBound(inCur), 1).Value = inCur

        With ws
            .Range("G" & outCurRng.Row & ":L" & outCurRng.Row).Value = _
            .Range("G" & cell.Row & ":L" & cell.Row).Value
        End With

        Set outCurRng = outCurRng.Offset(UBound(inCur), 0)

    Next cell

    ws.Range("F" & outFirstRng.Row & ":F" & outCurRng.Row - 1).Value = 1

End Sub

感谢那些回应的人。一位朋友通过提供以下代码提供了帮助:

Sub Breakout()
    Application.ScreenUpdating = False
    LR = Cells(Rows.Count, 1).End(xlUp).Row
    For r = LR To 2 Step -1
        Set MyCell = Cells(r, 1)
        Arry = Split(MyCell.Value, "^")
        For c = 0 To UBound(Arry)
            If c > 0 Then MyCell.Offset(c, 0).EntireRow.Insert
            MyCell.Offset(c, 0) = Arry(c)
        Next c
    Next r
End Sub

谢谢你。我应该在我的帖子中提到,我已经尝试过这种方法。当我只有一个文本字符串,下面有空行可以转置时,TtoC先转置,然后转置是有效的。不幸的是,当我在连续行中有多个字符串时,例如在我的例子中,它不起作用。如果这个代码对你有用,你应该考虑接受它,这样别人就可以看到并从中学习。