根据单元格中字符串的长度插入一行

时间:2016-11-09 05:24:01

标签: excel excel-vba macros vba

我如何根据行值插入一行,例如 我在单元格中有以下案例

SFF465
SFF465+466
SFF466+467+468+469
SFF469+DFG234
DFG235
DFG236+237+238+239

如果同一单元格中有多个值,我想为第二批插入新行。例如,在第一行中不应该有任何更改,但在第二行中,两个批次都需要分成不同的行。我需要在第二行SFF465和第三行SFF 466。因此第二行将仅从SFF465+466更改为SFF465

同样的事情是当前的第三行有四个数字,并希望将它们分别分为当前行下面的SFF466SFF467SFF468SFF469。 / p>

在第四行,您可以看到两种不同的产品。我想通过在当前第四行的正下方添加另一行来拆分。因此,将当前第四行转换为SFF469,将第五行转换为DFG234

所需格式为

SFF465
SFF465
SFF466
SFF466
SFF467
SFF468
SFF469
SFF469
DFG234
DFG235
DFG236
DFG237
DFG238
DFG239

提前致谢。

我使用相对引用编写代码并使用If ThenDo While循环修改它们。

Sub Vcpy() 
' ' Vcpy Macro

    If ActiveCell.Value <> Empty Then 

        Do While ActiveCell.Value <> Empty

         ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select 
         Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove    
         ActiveCell.Offset(-1, 4).Range("A1").Select
         Selection.Copy
         ActiveCell.Offset(1, -1).Range("A1").Select
         ActiveSheet.Paste Application.CutCopyMode = False 
         ActiveCell.Offset(1, 1).Range("A1").Select

       Loop 

   End If 

End Sub

1 个答案:

答案 0 :(得分:0)

我不知道如何使你的代码工作,但我有一个不同的解决方案。验证您给定的示例数据集。

Sub RowSplitter()
    Dim rng As Range
    Dim arr() As String
    Dim str As String

    Set rng = Range("A1")

    Do While (rng.Value <> "")
        ' Determine if we need to split
        If Len(rng.Value) > 6 Then
            ' Split values into an array
            arr() = Split(rng.Value, "+")

            For i = 1 To UBound(arr())
                str = ""

                ' Insert row
                rng.Offset(i).Insert Shift:=xlDown

                ' Calculate string to insert from array
                If Len(arr(i)) < 4 Then str = Left(arr(0), 3)
                str = str & arr(i)

                ' Enter value from array
                rng.Offset(i).Value = str
            Next i

            rng.Value = arr(0)
        End If

        Set rng = rng.Offset(1)
    Loop
End Sub