標題:
[發問]
[請教] 關於 Select Case ... End Select 程式簡化問題
[打印本頁]
作者:
mark15jill
時間:
2012-12-21 16:46
標題:
[請教] 關於 Select Case ... End Select 程式簡化問題
[問題]
因為陣列內判斷元件的序號值(ID Code)是處於第N區域 (N為10個1組)
但是用以下程式碼 ,區域少是可行,一旦區域多,整個程式碼行數就會暴增
有試著在陣列 n=1 .... n=n+1 當中判斷
但是 可能是小弟功夫不到家,判斷之後,反而整區塊的 Text 不顯示(應該是說讀不到)
不知道是否有比較簡易的判斷可以處理這種情況?
原程式碼如下
For ksj = 1 To nn
Select Case ksj
Case 1 To 10
btuarray(usx1, usy1).Text = "第 1 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 11 To 20
btuarray(usx1, usy1).Text = "第 2 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 21 To 30
btuarray(usx1, usy1).Text = "第 3 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 31 To 40
btuarray(usx1, usy1).Text = "第 4 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 41 To 50
btuarray(usx1, usy1).Text = "第 5 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 51 To 60
btuarray(usx1, usy1).Text = "第 6 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 61 To 70
btuarray(usx1, usy1).Text = "第 7 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 71 To 80
btuarray(usx1, usy1).Text = "第 8 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 81 To 90
btuarray(usx1, usy1).Text = "第 9 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 91 To 100
btuarray(usx1, usy1).Text = "第 10 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 101 To 110
btuarray(usx1, usy1).Text = "第 11 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 111 To 120
btuarray(usx1, usy1).Text = "第 12 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Case 121 To 130
btuarray(usx1, usy1).Text = "第 13 區域" & " 第" & " " & ksj - 1 & " " & "區塊"
End Select
Next
複製代碼
作者:
GBKEE
時間:
2012-12-21 17:37
本帖最後由 GBKEE 於 2012-12-22 08:45 編輯
回復
1#
mark15jill
Sub Ex()
For ksj = 11 To nn Step 10
For x = -1 To 8
btuarray(usx1, usy1).Text = "第 " & Int(ksj / 10) + 1 & " 區域 第 " & ksj + x & " 區塊"
Next
Next
End Sub
複製代碼
作者:
alexliou
時間:
2012-12-21 17:44
把ksj 除以10, 無條件進位到整數即可
程式碼可以如下:
Dim n as Integer 'n代表區域號碼
For ksj = 1 To nn
n = WorkSheetFunction.Ruundup(ksj,0)
btuarray(usx1, usy1).Text = "第" & cstr(n) & "區域" & " 第" & " " & ksj - 1 & " " & "區塊"
Next
作者:
alexliou
時間:
2012-12-21 17:49
把ksj 除以10, 無條件進位到整數即可
程式碼可以如下:
Dim n as Integer 'n代表區域號碼
For ksj ...
alexliou 發表於 2012-12-21 17:44
應該是roundup才對
作者:
mark15jill
時間:
2012-12-22 08:46
回復
2#
GBKEE
[ To GBKEE 大大]
會變成 1-10 區塊 消失
而 11 - 130 區塊 會以10個為一組的方式 固定數值(如 11 ~ 20 區塊 會變成 第二區域 第20區塊 )...
請問這是甚麼原因?
[ To alexliou 大大]
您的方法似乎是將變數(N) 設定至 sheet內,但這似乎不是小弟想要的,感謝您教導
作者:
alexliou
時間:
2012-12-22 09:02
回復
5#
mark15jill
N 並不是要放在Sheet內
"WorkSheetFunction"這個字並非指N要放在Sheet內
它只是要引用 RoundUp 這個無條件進入的函數
就像在VBA中要引用Max這個函數一樣
因為Max 和RoundUp都不是VBA的內建函數
而是屬於Excel 工作表的函數
另外, 我猜測你想要把66顯示為"第7 區域 第6 區塊"
程式碼應為
For ksj = 1 To nn
n = WorkSheetFunction.Roundup(ksj/10,0)
btuarray(usx1, usy1).Text = "第" & cstr(n) & " 區域" & " 第" & " " & (ksj- n *10) & " 區塊"
Next
作者:
GBKEE
時間:
2012-12-22 10:05
回復
5#
mark15jill
For ksj = 1 To nn
Select Case ksj
Case 1 To 10 '---> 第
1
區域
btuarray(usx1, usy1).Text = "第 1 區域" & " 第" & " " & ksj - 1 & " " & "區塊"->
ksj - 1 & "區塊"
Case 21 To 20 '---> 第
2
區域
'
'
Next
Sub Ex()
For ksj = 1 To nn Step 10
For x = -1 To 8
btuarray(usx1, usy1).Text = "第 " & Int(ksj / 10) + 1 & " 區域 第 " & ksj + x & " 區塊"
Next
Next
End Sub
複製代碼
作者:
mark15jill
時間:
2012-12-22 10:14
本帖最後由 mark15jill 於 2012-12-22 10:18 編輯
[ To GBKEE 大大]
已解決...
小弟剛剛重新編寫,發現疏忽掉一個點... "nn"
For ksj = 1 To nn Step 10
.Text = "第 " & Int(ksj / 10) + 1 & " 區域 第 " & nn & " 區塊"
Next
變成單循環+nn 然後區域用 大大您所教導的整數判斷..
因之前問題是出在 區塊可以正常判讀,區域不行..
小弟將區域的部分替換,區塊仍不更改,問題就解決了。
[ To alexliou 大大]
抱歉,小弟才疏學淺,將大大您所教導的誤認為其他方面。
感謝兩位大大的指教..
呈現出來的結果會變成..
1-10 第一區域 的 第1~10區塊
11-20 第二區域 的 第1~10區塊
以此類推..
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)