重复VBA sub进行复制,并在多行上“粘贴值”

时间:2015-06-17 13:42:01

标签: excel vba excel-vba

我对VBA很新。

我的财务电子表格变得非常复杂,并且充斥着可能最初设置得更好的手动复制和粘贴任务。

我的任务相当简单(我认为):我有8个单元格要复制并粘贴到(在上个月的硬编码值中设置动态预算),然后将此过程重复到其他6个具有相同单元格图案的同一列中的目标。

例如:

(1)复制 - >粘贴值H4:H5,H8,H10& H13:H16

(2)在H23上重复:H24(H4:H5 + 20行),H27(H8 + 20行),H39(H10 + 20行),H32:H35(H13:H:16 + 20行)< / p>

(3)然后在列中多次重复相同的复制和粘贴模式:

     H
4  **Paste Value**
5  **Paste Value**
6 Leave alone
7 Leave alone
8  **Paste Value**
9 Leave alone
10  **Paste Value**
11 Leave alone
12 Leave alone
13  **Paste Value**
14  **Paste Value**
15  **Paste Value**
16  **Paste Value**

Skip H:17:H22

     H
23 **Paste Value**
24 **Paste Value**
25 Leave alone
26 Leave alone
27  **Paste Value**
28 Leave alone
29  **Paste Value**
30 Leave alone
31 Leave alone
32  **Paste Value**
33  **Paste Value**
34  **Paste Value**
35  **Paste Value**

这是我为第一组记录的宏:

Sub RFC_Paste_Month_Values()
'
' RFC_Paste_Month_Values Macro

    Range("H4:H5").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("H8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("H10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("H13:H16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

' Copy and "Paste Special- Values" of set budgets '

End Sub

非常感谢任何帮助。谢谢!

泰德

1 个答案:

答案 0 :(得分:1)

以下是代码的短版本,其中包含许多宏录制器生成的内容。它可以进一步改进,但你需要进一步解释它在做什么:

更新的答案

Sub RFC_Paste_Month_Values()
'
' RFC_Paste_Month_Values Macro
'

Dim i As Integer

With ActiveSheet
    For i = 0 To .UsedRange.Rows.Count Step 19 '
        .Range(.Cells(4 + i, 8), .Cells(5 + i, 8)) = .Range(.Cells(4 + i, 8), .Cells(5 + i, 8)).Value
        .Cells(8 + i, 8) = .Cells(8 + i, 8).Value
        .Cells(10 + i, 8) = .Cells(10 + i, 8).Value
        .Range(.Cells(13 + i, 8), .Cells(16 + i, 8)) = .Range(.Cells(13 + i, 8), .Cells(16 + i, 8)).Value
    Next i
End With

End Sub

再次......我没有机会测试它,但我认为它应该适合你。