首页 > 解决方案 > 根据单元格包含的内容插入多行,然后填充它们

问题描述

我有以下情况

1  Type 1         Data 1    Data 2   Data 3   Data 4
2  Type 1         Data 5    Data 6   Data 7   Data 8
3  Type 2         Data 9    Data 10  Data 11  Data 12
etc.

其中第一列是索引列,第三列是空的。(在第 3 列和数据开始的列之间还有 5 个空列。数据实际上从第 9 列开始,但出于显示目的,我这样写)。

我要做的是,根据B列的单元格,如果是Type 1,在下面添加5个空行,如果是Type 2,在下面添加8个空行。换句话说,类型 1 行有 5 个“子”行,类型 2 行有 8 个“子”行

现在我需要填写这些行。我有第二张表,其中列出了类型 1 的 5 个项目和类型 2 的 8 个项目:

item 1.1         item 2.1
item 1.2         item 2.2
item 1.3         item 2.3
item 1.4         item 2.4
item 1.5         item 2.5
                 item 2.6
                 item 2.7
                 item 2.8

我需要它看起来像这样(下面的空行仅用于此页面上的显示目的,实际工作表中不能有任何空行):

1  Type 1            Data 1    Data 2    Data 3   Data 4
2  Item 1.1    1               Data 2             Data 4
3  Item 1.2    1               Data 2             Data 4 
4  Item 1.3    1               Data 2             Data 4
5  Item 1.4    1               Data 2             Data 4 
6  Item 1.5    1               Data 2             Data 4

7  Type 1            Data 5    Data 6    Data 7   Data 8
8  Item 1.1    7               Data 6             Data 8
10 Item 1.2    7               Data 6             Data 8
11 Item 1.3    7               Data 6             Data 8
12 Item 1.4    7               Data 6             Data 8
13 Item 1.5    7               Data 6             Data 8

14 Type 2            Data 9    Data 10   Data 11  Data 12
15 item 2.1    14              Data 10            Data 12
16 item 2.2    14              Data 10            Data 12
17 item 2.3    14              Data 10            Data 12
18 item 2.4    14              Data 10            Data 12
19 item 2.5    14              Data 10            Data 12
20 item 2.6    14              Data 10            Data 12
21 item 2.7    14              Data 10            Data 12
22 item 2.8    14              Data 10            Data 12
etc.

请注意,已经进行了重新索引,并且第三列现在已经填充了“父”索引(父索引除外,如图所示,它将保持为空)。

关于B列的分布,通常我一共拥有所有类型1,然后是类型2。(作为这篇文章的设置)。

我已经做了几个月的宏,但我无法为此想出一个宏,因为重新索引和调整大小真的让我感到困惑。

提前致谢。

标签: excelvbarows

解决方案


尝试:

    Sub test3()

    Dim i As Long, j As Long, LastRow1 As Long, No As Long, LastRow2 As Long, Times As Long
    Dim sType As String, Data As String, Data1 As String, Data2 As String, Data3 As String
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = ThisWorkbook.Worksheets("Sheet1")
    Set ws2 = ThisWorkbook.Worksheets("Sheet2")

        LastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row

        Number = 1

        For i = 2 To LastRow1

            No = ws1.Range("A" & i).Value
            sType = ws1.Range("B" & i).Value
            Data = ws1.Range("C" & i).Value
            Data1 = ws1.Range("D" & i).Value
            Data2 = ws1.Range("E" & i).Value
            Data3 = ws1.Range("F" & i).Value

            If i = 2 Then
                LastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
            Else
                LastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1
            End If

            ws2.Range("A" & LastRow2 + 1).Value = Number
            ws2.Range("B" & LastRow2 + 1).Value = sType
            ws2.Range("D" & LastRow2 + 1).Value = Data
            ws2.Range("E" & LastRow2 + 1).Value = Data1
            ws2.Range("F" & LastRow2 + 1).Value = Data2
            ws2.Range("G" & LastRow2 + 1).Value = Data3

            If Right(sType, 1) = 1 Then
                Times = 5
            ElseIf Right(sType, 1) = 2 Then
                Times = 8
            End If

            For j = 1 To Times

                LastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row

                ws2.Range("A" & LastRow2 + 1).Value = Number + j
                ws2.Range("B" & LastRow2 + 1).Value = "Item " & Right(sType, 1) & "." & j
                ws2.Range("C" & LastRow2 + 1).Value = Number
                ws2.Range("E" & LastRow2 + 1).Value = Data1
                ws2.Range("G" & LastRow2 + 1).Value = Data3

            Next j

            Number = Number + 6

        Next i

End Sub

推荐阅读