Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 Formula - Fatal编程技术网

Excel 如何将行转换为列,并插入行以容纳新行?

Excel 如何将行转换为列,并插入行以容纳新行?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有以下数据集: A B Bob black, brown, blue Jane red, yellow Mary orange 我希望获得以下输出: A B Bob black Bob brown Bob blue Jane red Jane yellow Mary orange 或者,A列中的名称不必重复。我猜我需要将行转换为列,但我在添加额外的行以使数据对齐方面遇到了困难 我们将非常感谢您的帮助。以下是您在VBA中的操作方法: Dim last

我有以下数据集:

A     B
Bob   black, brown, blue
Jane  red, yellow
Mary  orange
我希望获得以下输出:

A     B
Bob   black
Bob   brown
Bob   blue
Jane  red
Jane  yellow
Mary  orange
或者,A列中的名称不必重复。我猜我需要将行转换为列,但我在添加额外的行以使数据对齐方面遇到了困难


我们将非常感谢您的帮助。

以下是您在VBA中的操作方法:

Dim lastRow As Integer, rng As Range
With Sheet1                                             ' <-- Use the appropriate worksheet.
    lastRow = .Range("B" & .Rows.Count).End(xlUp).Row

    For i = lastRow To 1 Step -1
        Set rng = .Range("B" & i)
        Dim items() As String
        items = Split(rng.Value, ",")
        rng.Value = items(0)
        For j = 1 To UBound(items)
            .Rows(i + j).Insert
            rng.Offset(j).Value = Trim$(items(j))
            'rng.Offset(j, -1).Value = rng.Offset(0, -1).Value      ' <-- Optional
        Next j
    Next i
End With

花太多的时间在更多的事情上rows@DmitrijHolkin加工10万行需要20秒,生产3万行。显然,可以通过将值复制到数组并一次性将其设置回原来的值来优化它,但这会使事情变得过于复杂,而且我认为OP不可能有那么多行。您可以将范围设置为数组或字典,排序,然后调整大小以显示相同行数所需的时间<20秒