我需要一些想要使用的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
对我的英语感到抱歉,希望您理解我想说的话。
答案 0 :(得分:0)
您无需粘贴值即可添加它。您可以通过这种方式简单地计算和设置值
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,依此类推
修改: 当您收到诸如类型不匹配之类的错误时,我通常要做的是检查为什么我希望只对数字求和时会发生这种情况。您可以通过在消息框中显示值来做到这一点(还有其他更好的方法,如debug-在点#4下有更多信息here或在链接中也使用断点,但是消息框很简单)。因此,当前,如果该行给您错误,只需将其放在该行的前面即可。
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
请注意,我没有更改范围行计算内或for周期内的任何内容。您需要确保这些设置有意义,因为我不知道您在d
和f
中具有什么值。
答案 1 :(得分:0)
也许是这样。...我在最后一个循环中添加了一个计数器,它将替换您在T2
中的值。
Sub oefen()
' oefen Macro
Dim f As Long
Dim d As Long
Static counter As Long
d = Sheets("Omreken").Range("N2").Value
f = Sheets("Omreken").Range("U2").Value
counter = 1
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 - 0
Dim T2 As Long
If Not f = 2 Then
T2 = Cells(2, 20).Value
T2 = T2 + counter
Cells(2, 20).Value = T2
Range("T2").Copy
Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).Offset(-d, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
:=False, Transpose:=False
Else 'Skip counter for the first loop
Range("T2").Copy
Range("A" & (2 + ((f - 1) * d)) & ":" & "A" & (1 + (f * d))).Offset(-d, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
:=False, Transpose:=False
End If
Next f
End Sub