作者ricewine (红标米酒)
看板Visual_Basic
标题[VBA ] For回圈内的变数设定
时间Sat Apr 30 07:22:25 2011
试了几次,试不出来。
从excel汇进24格资料,
比较这24格资料的数值是否有异动(a1~ax格),
做完之後换(a2~b2格),……,重覆做n次。
a b c d e f g ...... x
1
2
3
.
.
n
最後是写出来了,但回圈的部份卡住了,
只好用2x行把它写出来,程式变的很长,
问题应该是卡在变数设定,把程式精简、修改一下,比较好说明。
这边是ok的 这边是不ok的,二边只差一行(亮白色)
Public Sub aaa() Public Sub aaa()
Var1 = 3 Var1 = 3
Var2 = 4 Var2 = 4
n = 1 n = 1
m = 2 m = 2
If Var1 <> Var2 If Varn <> Varm
Then var25 = var25 + 1 Then var25 = var25 + 1
Range("a25").Value = var25 Range("a25").Value = var25
End Sub End Sub
这边不ok的原因是n、m、varn、varm是不同的参数,
无法透过n=1、m=2让varn、varm视为var1、var2,
我在写的时候,是用
for n = 1 to 23
m = n + 1
If Varn <> Varm Then var25 = var25 + 1
next
因为Varn、Varm无法用这种方式指定,就写不出来了。
请板上的vba高手解答一下,感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.231.207
1F:→ ricewine:昨天有别板的板友建议宣告单维阵列,同样有类似的问题 04/30 07:32
附上程式码供参考
Public Sub aaa()
Dim var(24) As Double
For i = 3 To 10
var(0) = 0
var(1) = Math.Sgn(Range("bj" & i).Value)
var(2) = Math.Sgn(Range("bv" & i).Value)
var(3) = Math.Sgn(Range("bk" & i).Value)
var(4) = Math.Sgn(Range("bw" & i).Value)
var(5) = Math.Sgn(Range("bl" & i).Value)
var(6) = Math.Sgn(Range("bx" & i).Value)
var(7) = Math.Sgn(Range("bm" & i).Value)
var(8) = Math.Sgn(Range("by" & i).Value)
var(9) = Math.Sgn(Range("bn" & i).Value)
var(10) = Math.Sgn(Range("bz" & i).Value)
var(11) = Math.Sgn(Range("bo" & i).Value)
var(12) = Math.Sgn(Range("ca" & i).Value)
var(13) = Math.Sgn(Range("bp" & i).Value)
var(14) = Math.Sgn(Range("cb" & i).Value)
var(15) = Math.Sgn(Range("bq" & i).Value)
var(16) = Math.Sgn(Range("cc" & i).Value)
var(17) = Math.Sgn(Range("br" & i).Value)
var(18) = Math.Sgn(Range("cd" & i).Value)
var(19) = Math.Sgn(Range("bs" & i).Value)
var(20) = Math.Sgn(Range("ce" & i).Value)
var(21) = Math.Sgn(Range("bt" & i).Value)
var(22) = Math.Sgn(Range("cf" & i).Value)
var(23) = Math.Sgn(Range("bu" & i).Value)
var(24) = Math.Sgn(Range("cg" & i).Value)
For n = 0 To 23
If var(n) <> var(n + 1) Then var25 = var25 + 1
Range("Cp" & i).Value = var25
var25 = 0
Next
Next
End Sub
※ 编辑: ricewine 来自: 61.231.231.207 (04/30 10:44)
2F:→ ricewine:试过for n = 0 to 23 04/30 11:55
3F:→ ricewine:或 for var(n) = var(0) to var(23) 都不行,对调也是 04/30 11:55
4F:→ ricewine:跑出来的结果都是1 04/30 11:56
5F:→ ricewine:感谢p大的私信指导,原来是var25=0放错位置,和next对调 04/30 13:24
6F:→ ricewine:就行了 04/30 13:24
※ 编辑: ricewine 来自: 61.231.231.207 (04/30 13:34)
7F:推 sueadolph:RANGE("B" & 1).Value 可以写成 cells(1,2) 04/30 15:14
8F:→ sueadolph:RANGE("C" & 1).Value 可以写成 cells(1,3) 04/30 15:15
9F:→ sueadolph:你的一大串程式都可缩短不少,不过结果有一样就好了^^ 04/30 15:16