Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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,我习惯于使用python,但为此需要在excel中使用它 我有类似于I/p数据的输入数据,我希望获得所需输出中提到的数据。所需的输出应该只是将数据替换到A列和B列中。 还有许多其他专栏 任何关于如何使用excel/VBA的线索都很好 试试下面的方法: 代码: 为每个Mr no的每个订单写一行(可能会减少代码) 将值存储在数组中,并在最后打印整个数组(更快) 结果: 尝试以下方法: 代码: 为每个Mr no的每个订单写一行(可能会减少代码) 将值存储在数组中,并在最后打印整个数组(更快)

我习惯于使用python,但为此需要在excel中使用它

我有类似于I/p数据的输入数据,我希望获得所需输出中提到的数据。所需的输出应该只是将数据替换到A列和B列中。 还有许多其他专栏

任何关于如何使用excel/VBA的线索都很好

试试下面的方法:

代码:

  • 为每个Mr no的每个订单写一行(可能会减少代码)

  • 将值存储在数组中,并在最后打印整个数组(更快)

  • 结果:

    尝试以下方法:

    代码:

  • 为每个Mr no的每个订单写一行(可能会减少代码)

  • 将值存储在数组中,并在最后打印整个数组(更快)

  • 结果:


    请使用下一个代码。它非常快,只在内存中工作(使用数组)。它还允许分隔符为“;”、“;”(更多空格,但编辑器会更正)或“;”。我的代码一次输入结果,可以非常快速地处理数千行

    Sub SplitCells()
      Dim sh As Worksheet, lastR As Long, arrIn As Variant, arrRow As Variant
      Dim arrF As Variant, i As Long, j As Long, n As Long
    
        Set sh = ActiveSheet ' use here your sheet
        lastR = sh.Range("A" & Cells.Rows.Count).End(xlUp).row
        arrIn = sh.Range("A2:B" & lastR).value
        ReDim arrF(1 To 2, 1 To 2000): n = 1
    
        For i = 1 To UBound(arrIn, 1)
            arrRow = Split(Trim(arrIn(i, 2)), ";")
            For j = 0 To UBound(arrRow)
                 arrF(1, n) = arrIn(i, 1)
                 arrF(2, n) = arrRow(j)
                 n = n + 1
            Next j
        Next i
        ReDim Preserve arrF(1 To 2, 1 To n - 1)
       sh.Range("D2").Resize(n - 1, 2) = WorksheetFunction.Transpose(arrF)
    End Sub
    

    如果您想返回另一个范围内的数组数据,只需根据需要更改“D2”即可…

    请使用下一个代码。它非常快,只在内存中工作(使用数组)。它还允许分隔符为“;”、“;”(更多空格,但编辑器会更正)或“;”。我的代码一次输入结果,可以非常快速地处理数千行

    Sub SplitCells()
      Dim sh As Worksheet, lastR As Long, arrIn As Variant, arrRow As Variant
      Dim arrF As Variant, i As Long, j As Long, n As Long
    
        Set sh = ActiveSheet ' use here your sheet
        lastR = sh.Range("A" & Cells.Rows.Count).End(xlUp).row
        arrIn = sh.Range("A2:B" & lastR).value
        ReDim arrF(1 To 2, 1 To 2000): n = 1
    
        For i = 1 To UBound(arrIn, 1)
            arrRow = Split(Trim(arrIn(i, 2)), ";")
            For j = 0 To UBound(arrRow)
                 arrF(1, n) = arrIn(i, 1)
                 arrF(2, n) = arrRow(j)
                 n = n + 1
            Next j
        Next i
        ReDim Preserve arrF(1 To 2, 1 To n - 1)
       sh.Range("D2").Resize(n - 1, 2) = WorksheetFunction.Transpose(arrF)
    End Sub
    

    如果要返回另一个范围内的数组数据,只需根据需要更改“D2”…

    该范围需要处理多长时间?就100、1000、20000或更多而言。。。根据这个大小,可以直接操作范围,或者使用数组。但是行的数量可能是可变的。A:R无关紧要,因为只处理A:B列中的数据。如果处理后的数据将在D:E列中返回,这会是一个问题吗?您是否需要在另一个工作表中执行此操作,或者如何执行?B:B列“销售值”上的分隔符将始终为“;”,或者也可以仅为“肉类”?它可以在同一列A和B上替换,或者在A和B之后添加一个新列。这可能吗?其想法是,您可以随时保存目的地。代码将足够简单(但我认为效率很高),便于理解。而且,请注意,这里我们不为提问的人编写代码。我们通常帮助他们解决代码中的问题并学习一些东西。。。但我现在有一些时间,我会在几分钟后发布一个答案…处理的范围有多长?就100、1000、20000或更多而言。。。根据这个大小,可以直接操作范围,或者使用数组。但是行的数量可能是可变的。A:R无关紧要,因为只处理A:B列中的数据。如果处理后的数据将在D:E列中返回,这会是一个问题吗?您是否需要在另一个工作表中执行此操作,或者如何执行?B:B列“销售值”上的分隔符将始终为“;”,或者也可以仅为“肉类”?它可以在同一列A和B上替换,或者在A和B之后添加一个新列。这可能吗?其想法是,您可以随时保存目的地。代码将足够简单(但我认为效率很高),便于理解。而且,请注意,这里我们不为提问的人编写代码。我们通常帮助他们解决代码中的问题并学习一些东西。。。但是我现在有一些时间,我会在几分钟后发布一个答案…@Rocky我已经导入了另一个解决方案,我想我会更快。你两个都可以试试!希望你能找到你想要的!很好用!学习excel编码的最佳实践或来源是什么?@Rocky思考一个实际生活场景,该场景耗时且难以手动完成,通过编写几行代码来实现自动化。在犯错、测试和研究之后,你会学到东西。你也可以开始在论坛上解决问题,这样会更有效率。这是我的意见。@Rocky我已经导入了另一个解决方案,我认为我更快。你两个都可以试试!希望你能找到你想要的!很好用!学习excel编码的最佳实践或来源是什么?@Rocky思考一个实际生活场景,该场景耗时且难以手动完成,通过编写几行代码来实现自动化。在犯错、测试和研究之后,你会学到东西。你也可以开始在论坛上解决问题,这样会更有效率。这是我的意见。
    Sub SplitCells()
      Dim sh As Worksheet, lastR As Long, arrIn As Variant, arrRow As Variant
      Dim arrF As Variant, i As Long, j As Long, n As Long
    
        Set sh = ActiveSheet ' use here your sheet
        lastR = sh.Range("A" & Cells.Rows.Count).End(xlUp).row
        arrIn = sh.Range("A2:B" & lastR).value
        ReDim arrF(1 To 2, 1 To 2000): n = 1
    
        For i = 1 To UBound(arrIn, 1)
            arrRow = Split(Trim(arrIn(i, 2)), ";")
            For j = 0 To UBound(arrRow)
                 arrF(1, n) = arrIn(i, 1)
                 arrF(2, n) = arrRow(j)
                 n = n + 1
            Next j
        Next i
        ReDim Preserve arrF(1 To 2, 1 To n - 1)
       sh.Range("D2").Resize(n - 1, 2) = WorksheetFunction.Transpose(arrF)
    End Sub