2

说我有这样的数据

  A   B   C
1 Jim 1 10    
2 Jim 2 20
3 Jim 3 30
4 Tom 1 20
5 
6 
7 Jos 1 15
8
9

我想要的是复制第 2 行和第 3 行,然后粘贴到第 5 行和第 6 行,然后粘贴到第 8 行和第 9 行,依此类推。空白行始终为 2。

单元格 2C 和 3C 中有一个公式计算列 B 中的值乘以单元格 C1。

所以,结果会是这样的

  A   B   C
1 Jim 1 10    
2 Jim 2 20
3 Jim 3 30
4 Tom 1 20
5 Tom 2 40 
6 Tom 3 60
7 Jos 1 15
8 Jos 2 30
9 Jos 3 45

问题是我必须粘贴数百次,这很耗时。

如果有人可以提供帮助,我将不胜感激。

4

2 回答 2

0
Sub MakeRows()
    Dim Sh As Worksheet, DataRng As Range, CopyRng As Range, TargetRng As Range

    Set Sh = Sheets(1) 'select your sheet here
                       'you can also do it like this = Worksheets("name")

    Set DataRng = Sh.Range("B2")
    Set TargetRng = Sh.Range("A4")

    While IsEmpty(TargetRng) = False
       TargetRng.Copy TargetRng.Offset(1, 0)
       TargetRng.Copy TargetRng.Offset(2, 0)

       Set CopyRng = Sh.Range(DataRng, DataRng.Offset(1, 1))
       CopyRng.Copy TargetRng.Offset(1, 1)

       Set TargetRng = TargetRng.Offset(3, 0)
       Set DataRng = DataRng.Offset(3, 0)
    Wend
End Sub

适用于单元格 2C 和 3C 中的相对引用。

于 2012-11-16T08:34:48.823 回答
0

铭记于心:

  • 您需要确保 A1 列中有一个值,否则只需将值i增加到带有数据的第二行。

  • Var是一个虚拟变量,用于在出现新名称时进行跟踪。

  • firstValue将包含每个名称第一行的行号。

代码

Sub test()

Var = 0
LastRow = Cells(Rows.Count, "A").End(xlUp).Row + 2

For i = 2 To LastRow
    If Range("A" & i).Value = "" Then
        If Var = 0 Then
            firstValue = i - 1
            Range("A" & i).Value = Range("A" & i - 1).Value
            Range("B" & i).Value = Range("B" & i - 1).Value + 1
            Range("C" & i).Value = Range("C" & firstValue).Value + Range("C" & i - 1).Value
            Var = Var + 1
        Else
            Range("A" & i).Value = Range("A" & i - 1).Value
            Range("B" & i).Value = Range("B" & i - 1).Value + 1
            Range("C" & i).Value = Range("C" & firstValue).Value + Range("C" & i - 1).Value
            Var = Var + 1
        End If
    Else
        Var = 0
    End If
Next i

End Sub
于 2012-11-16T10:46:16.643 回答