EXCEL根据某一单元格的值,自动复制插入行。求详细VBA代码,谢谢

例子是:下图片号1-25,需要显示为共25行,第一行片号1,第二行片号2.......,最后结果是第二张图的样子。

1、添加内件名称数据辅助列,输入以下公式,然后向下填充公式

=LEN(N2)-LEN(SUBSTITUTE(N2,",",""))+1

2、添加行数对应辅助列,输入以下公式,然后向下填充公式

=SUM(Q$2:Q2)-Q2

3、输入以下公式,然后向右向下填充公式

=IF(ROW(A1)-1<SUM($Q:$Q),LOOKUP(ROW(A1)-1,$R$2:$R$4,B$2:B$4),"")

生成对应内件名称个数的行数内容。

 

详见附图同表举例

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-01-12

以下代码测试通过,如果使用中出现问题,请拷屏:

Option Explicit
Sub ygb()
    Dim i, j, arr1, arr2, n, m, st As Worksheet
    Set st = ActiveSheet '对当前工作表进行处理,你可以修改为处理其他表
    For i = st.UsedRange.Rows.Count To 2 Step -1 '从最后一行倒着处理回来
        arr1 = st.Cells(i, 1).Resize(1, 8) 'A-H列含有需要复制的内容
        arr2 = Split(arr1(1, 5), "-") '对E列拆分
        If UBound(arr2) > 0 Then '含有-,则插入
            n = Val(arr2(0))
            m = Val(arr2(1))
            For j = n To m
                If j <> n Then st.Rows(i).Insert
                arr1(1, 5) = j
                st.Cells(i, 1).Resize(1, 8) = arr1
            Next j
        End If
    Next i
    MsgBox "ok"
End Sub

追问

大神,你给的代码,可以成功执行。太感谢!!!!下面这种情况的,片号数值是间断的,代码该如何写:

追答

增加功能后的代码(支持100,200,210-220,300-301,400,405-450这样的复杂格式):

 Option Explicit

Sub ygb()
    Dim i, j, k, arr1, arr2, s, n, m, st As Worksheet
    Set st = ActiveSheet '对当前工作表进行处理,你可以修改为处理其他表
    For i = st.UsedRange.Rows.Count To 2 Step -1 '从最后一行倒着处理回来
        k = i
        arr1 = st.Cells(i, 1).Resize(1, 8) 'A-H列含有需要复制的内容
        For Each s In Split(arr1(1, 5), ",")  '对E列拆分
            arr2 = Split(s, "-")
            n = Val(arr2(0))
            If UBound(arr2) > 0 Then m = Val(arr2(1)) Else m = n
            For j = n To m
                If k <> i Then st.Rows(i).Insert
                arr1(1, 5) = j
                st.Cells(i, 1).Resize(1, 8) = arr1
                k = k + 1
            Next j
        Next s
    Next i
    MsgBox "ok"
End Sub

本回答被提问者采纳
第2个回答  2015-05-13
Sub cs()
Dim b(1 To 9999, 1 To 8)
a = ActiveSheet.Range("A1").CurrentRegion.Resize(, 8)
For i = 1 To UBound(a)
    s = Split(a(i, 5), "-")
    For j = s(0) To s(UBound(s))
        p = p + 1
        For k = 1 To 8
            b(p, k) = a(i, k)
        Next
        b(p, 5) = j
    Next
Next
If Sheets.Count < 2 Then Sheets.Add
Sheets(2).Range("A2").Resize(p, 8) = b
Sheets(2).Activate
End Sub

第3个回答  2015-05-13
Sub 填充()
Dim x%, y%
x = Range("f2") + 1
Rows("2:" & x).Select
Selection.FillDown
For y = 2 To x
Cells(y, 5) = y - 1
Next
End Sub

EXCEL根据某一单元格的值,自动复制插入行。求详细VBA代码,谢谢
1、添加内件名称数据辅助列,输入以下公式,然后向下填充公式 =LEN(N2)-LEN(SUBSTITUTE(N2,",",""))+1 2、添加行数对应辅助列,输入以下公式,然后向下填充公式 =SUM(Q$2:Q2)-Q2 3、输入以下公式,然后向右向下填充公式 =IF(ROW(A1)-1<SUM($Q:$Q),LOOKUP(ROW(A1)-1,$R$2:$R$4,B$2...

EXCEL根据某一单元格的值,自动复制插入行。求详细VBA代码?十分感谢
1、添加内件名称数据辅助列,输入以下公式,然后向下填充公式 =LEN(N2)-LEN(SUBSTITUTE(N2,",",""))+1 2、添加行数对应辅助列,输入以下公式,然后向下填充公式 =SUM(Q$2:Q2)-Q2 3、输入以下公式,然后向右向下填充公式 =IF(ROW(A1)-1<SUM($Q:$Q),LOOKUP(ROW(A1)-1,$R$2:$R$4,B$2...

EXCEL根据某一一行的值,自动复制插入行,VBA代码怎么写
12345678910Sub fuzhi()with activesheet For i = .Range("N65536").End(xlUp).Row To 2 Step -1 n = UBound(Split(.Cells(i, "N"), ",")) .Rows(i & ":" & i + n - 1).Insert .Rows(i + n).Copy .Rows(i & ":" & i + n - 1) .Rows(i + 1 & "...

excel中如何根据指定数字,紧随其后插入行数?
写VBA代码来完成,步骤如下:打开工作表,按ALT+F11组合键调出VBE,在右边的代码窗口输入如下代码:Sub InsertLine()Dim i As Integer, j As IntegerFor i = 2 To 1000For j = 1 To Cells(i, 4)Rows(i + 1).InsertNext jNext iEnd Sub 确保光标处于代码中,按F5键运行,完成!如有疑问...

EXCEL宏如何根据值自动复制行数
软件版本:Office2007 方法如下:1.根据E1内数字,复制从A1开始的E1行到SHeet2中:2.Alt+F11,输入代码如下:3.F5制定代码,返回Sheet2中,得到结果如下:

Excel 按指定列数值自动插入行
根据关键字,跨表引用,可以用vlookup函数来实现。表一示例数据:如上图,在做工资表时,需要有基础资料表,列示姓名、职务、底薪等基础信息。假如在表二中,用姓名作为关键字,可以如下图所示:B2公式为:=VLOOKUP($A$2,Sheet1!$A$2:$D$8,COLUMN(B:B),0)C2公式为:=VLOOKUP($A$2,Sheet1!

想在excel里用VBA,点击按钮复制一行数据到另外一行,可是不知道该怎么写...
代码如下:Private Sub ComboBox1_Change()Sheet2.Cells(1, 1).Value = ComboBox1.ValueDim i As Integeri = 2Do While Not i > 100000If Sheet3.Cells(i, 1) = "" ThenSheet3.Cells(i, 1).Value = Sheet2.Cells(1, 1).ValueSheet3.Cells(i, 2).Value = Now()GoTo lastline...

Excel 按指定列数值自动插入行
如下宏代码可实现你的目的,但中间不能有空单元格,否则中止,也不可以有非数据单元格,否则报错中断。Sub Macro1()Dim i As Integer lk = False Range("E1").Select Do If ActiveCell.FormulaR1C1 = "" Then lk = True ElseIf ActiveCell.Value > 0 Then ActiveCell.Offset(1, 0).Select ...

excel怎么把符合条件的一行自动复制
1、以C列为辅助列,在C2单元格输入以下公式,然后向下填充公式 =SUM(B$2:B2)-B2 2、输入以下公式,然后向下填充公式,得到规定次数的所有名称 =IF(ROW(A1)-1>=SUM(B:B),"",LOOKUP(ROW(A1)-1,C:C,A:A))3、F列的课时列,可以根据需要,全部输入1,或者F2输入=VLOOKUP(E2,A:B,2,0)...

excel 如何用宏VBA实现输入完数据光标框从一个单元格跳转到下一行的单元...
Target As Range)If Target.Count > 1 Then Exit SubIf Target <> "" Then Cells(WorksheetFunction.Min(65536, Target.Row + 1), WorksheetFunction.Max(1, Target.Column - 1)).SelectEnd Sub右键SHEET1,查看代码。粘贴上面的代码。因为考虑到在第一列或第65536行的情况,所以用了MIN和MAX。

相似回答