首页 > 解决方案 > Excel vba PasteSpecial xlAdd循环

问题描述

我需要一些关于我想使用的 PasteSpecial 的帮助。我自己编写了以下代码:

    Sub oefen()

    ' oefen Macro
    Dim f As Long
    Dim d As Long
    d = Sheets("Omreken").Range("N2").Value
    f = Sheets("Omreken").Range("U2").Value

    For f = 1 To f + 1
    Range("O2").Copy
    Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Next f

       For f = 2 To f - 1
       Range("T2").Copy
    Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).Select
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
            :=False, Transpose:=False
      Next f
      End Sub

我的代码执行以下操作:选择因循环而适应的特定范围。每次循环通过时,它会将 T2 的值添加到在执行 xlAdd 之前粘贴的 O2 的原始值。该代码对我来说几乎是完美的,除了我想在每次循环通过时向 T2 添加 +1。

所以假设我有 A1 是 1,A2 是 1,A3 是 1,A4 是 1。 xlAdd; T2 是 1 如果我要通过循环,我希望代码:

loop 1: A1 + T2*1 is 2
Loop 2: A2 + T2*2 is 3
Loop 3: A3 + T2*3 is 4
Loop 4: A4 + T2*4 is 5

对不起我的英语,我希望你明白我想说什么。

标签: excel

解决方案


您不需要粘贴值来添加它。您可以通过这种方式简单地计算和设置值

Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).value = Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).value+Range("T2").value*(f-1)

如果您循环使用f并且它从 2 开始,您需要添加

Range("T2").value*(f-1)

到每个值。因此,对于第一个值,它将添加 T2*(2-1)=T2*1,对于第二个值,它将添加 T2*2,依此类推

编辑:当您收到类型不匹配之类的错误时,我所做的通常是检查为什么会发生这种情况,因为我希望只总结数字。您可以通过在消息框中显示值来做到这一点(还有其他更好的方法,例如调试 - 在第 4 点下的更多信息也在链接中使用断点,但消息框很简单)。因此,目前如果该行给您错误,只需将其放在该行之前:

msgbox(Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).value)
msgbox(Range("T2").value)

请注意,每次循环运行都会显示 2 个弹出窗口,因此请限制您的范围。以这种方式运行它并在出现类型不匹配错误之前告诉我它显示的内容。

编辑2:

Sub oefen()

    ' oefen Macro
    Dim f As Long
    Dim d As Long
    d = Sheets("Omreken").Range("N2").Value
    f = Sheets("Omreken").Range("U2").Value

    For f = 1 To f + 1
        Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).value=Range("O2").value
    Next f

    For f = 2 To f - 1
         Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).value =Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f *d))).value+Range("T2").value*(f-1)
    Next f
  End Sub

请注意,我没有更改 Range 行计算或 for 循环中的任何内容。你需要确保这些有意义,因为我不知道你有什么价值观df


推荐阅读