EXCEL利用宏在不同的单元格重复运算

我有下面一段宏代码:
Sub simulation()
'
' simulation Macro
'
Range("A2").Select
ActiveCell.FormulaR1C1 = "=NORMINV(RAND(),0,1)"
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A21"), Type:=xlFillDefault
Range("A2:A21").Select
Range("C2").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R2C1:R21C1,""<=""&RC[-2])/20"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C21"), Type:=xlFillDefault
Range("C2:C21").Select
Range("E2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]-1/20"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E21"), Type:=xlFillDefault
Range("E2:E21").Select
Range("G2").Select
ActiveCell.FormulaR1C1 = "=NORMDIST(RC[-6],0,1,1)"
Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G21"), Type:=xlFillDefault
Range("G2:G21").Select
Range("H2").Select
ActiveCell.FormulaR1C1 = "=ABS(RC[-1]-RC[-5])"
Range("H2").Select
Selection.AutoFill Destination:=Range("H2:H21"), Type:=xlFillDefault
Range("H2:H21").Select
Range("I2").Select
ActiveCell.FormulaR1C1 = "=ABS(RC[-4]-RC[-2])"
Range("I2").Select
Selection.AutoFill Destination:=Range("I2:I21"), Type:=xlFillDefault
Range("I2:I21").Select
Range("K2").Select
ActiveCell.FormulaR1C1 = "=MAX(RC[-3]:R[19]C[-2])"
Range("K3").Select

End Sub

我想执行它100次,但是每次都在下面的单元格中保留结果。
请问我该如何改写我的代码?

您这个宏代码显然不是自己写的,是录制的。不过没有问题。宏那里有个“使用相对引用”把这个启动。

这样的话,录制的结果就会相对于您点击“录制宏”之前那个单元格的位置。

(注意,启用这个不会对您之前录制的宏有任何影响,所以您需要重新录制一段)

比如您选择A1单元格,然后录制了一串宏,作用是对A1~F1这一行进行了操作,那么当您停止录制后,再选择A2,执行了刚才的宏,那么结果就使对A2~F2这一行进行了刚才的操作。


如有帮助,请采纳。

追问

但是我希望它重复一百次 总不能一直点我需要出现的地方一百次吧?请问如何才能让它自动重复一百次呢?

追答

您大可不必每次都点一下那个需要出现的地方,您可以把这个“点需要出现的地方”也作进宏里面。意思就是:
点第一个需要操作的地方,然后开始录制宏,结束录制宏之前点下一个你需要进行操作的地方,然后结束录制。
打个比方,您要对A1~F1进行一些操作,而您知道这是个行操作,下一次开始的地方是A2,那么您先点到A1,开始录制宏,对A1~F1进行操作完成以后,点到A2上,然后再结束录制。
这样的效果就是您每执行一次宏,下一行的第一个单元格就被自动激活,您可以点100次宏就执行了100次这个操作,而不是要用鼠标来回点击工作区。

当然,因为100次的量其实不是很大,所以这种方法尚可以接受,如果是10000次呢?
这时候就需要您适当修改代码。用一个For循环,将刚才录制的宏框起来,比如您这个宏
Sub simulation()
'
' simulation Macro
'
Range("A2").Select
ActiveCell.FormulaR1C1 = "=NORMINV(RAND(),0,1)"
Range("A2").Select
........中间的省略了
ActiveCell.FormulaR1C1 = "=MAX(RC[-3]:R[19]C[-2])"
Range("K3").Select

End Sub

就可以把过程里的所有内容用For循环包含起来,注意不要把Sub。。。。和End Sub包含进去,那个是过程的定义。

Sub simulation()
For i=1 to 100 '这个100就是您要执行的次数。
'
' simulation Macro
'
Range("A2").Select
ActiveCell.FormulaR1C1 = "=NORMINV(RAND(),0,1)"
Range("A2").Select
........中间的省略了
ActiveCell.FormulaR1C1 = "=MAX(RC[-3]:R[19]C[-2])"
Range("K3").Select
Next 'next代表循环体的结束
End Sub

追问

可以再重复这个100次在A1到A20。我希望的是能够弄一万次刚刚的数据。

但是您提供的方法 我试过之后在A2到A20重复一万次 我希望这个宏是在不同的单元格里能够实现的

追答

能把您的宏代码给我发来我看看吗?我刚刚又实地测试了一下,没有任何问题啊,您确定那个“使用相对引用”是打开的吗?

追问

还是不行。试了选择性黏贴也还是那个问题。只是在一个地方重复黏贴。
但是我还是想用EXCEL把它算出来。我的邮箱是[email protected],您要是方便的话就给我发个邮件。这样在邮件里讨论吧。继续追问放不下我的代码。

追答

好。一会回去联系您。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-17
你描述得不太清楚哦,下面的单元格是指什么呀,依次保存起来么? 你可以把你的表传上来看下追问

就是每次作用于不同的单元格。比如我这个宏是在A1到A20 那下一次就在A21到A40,然后再下次就继续到A41到A60,这样重复操作一百次。当然其他也一样。

相似回答