[VBA ] For迴圈內的變數設定(已解決)

看板Visual_Basic作者 (紅標米酒)時間14年前 (2011/04/30 07:22), 編輯推噓1(108)
留言9則, 2人參與, 最新討論串1/1
試了幾次,試不出來。 從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

04/30 07:32, , 1F
昨天有別板的板友建議宣告單維陣列,同樣有類似的問題
04/30 07:32, 1F
附上程式碼供參考 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)

04/30 11:55, , 2F
試過for n = 0 to 23
04/30 11:55, 2F

04/30 11:55, , 3F
或 for var(n) = var(0) to var(23) 都不行,對調也是
04/30 11:55, 3F

04/30 11:56, , 4F
跑出來的結果都是1
04/30 11:56, 4F

04/30 13:24, , 5F
感謝p大的私信指導,原來是var25=0放錯位置,和next對調
04/30 13:24, 5F

04/30 13:24, , 6F
就行了
04/30 13:24, 6F
※ 編輯: ricewine 來自: 61.231.231.207 (04/30 13:34)

04/30 15:14, , 7F
RANGE("B" & 1).Value 可以寫成 cells(1,2)
04/30 15:14, 7F

04/30 15:15, , 8F
RANGE("C" & 1).Value 可以寫成 cells(1,3)
04/30 15:15, 8F

04/30 15:16, , 9F
你的一大串程式都可縮短不少,不過結果有一樣就好了^^
04/30 15:16, 9F
文章代碼(AID): #1DkqWpIl (Visual_Basic)