作者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