Board logo

標題: [發問] [請教] 關於 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 不顯示(應該是說讀不到)
不知道是否有比較簡易的判斷可以處理這種情況?




原程式碼如下
  1.                
  2.           For ksj = 1 To nn
  3.                     Select Case ksj
  4.                         Case 1 To 10
  5.                             btuarray(usx1, usy1).Text = "第 1 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  6.                         Case 11 To 20
  7.                             btuarray(usx1, usy1).Text = "第 2 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  8.                         Case 21 To 30
  9.                             btuarray(usx1, usy1).Text = "第 3 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  10.                         Case 31 To 40
  11.                             btuarray(usx1, usy1).Text = "第 4 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  12.                         Case 41 To 50
  13.                             btuarray(usx1, usy1).Text = "第 5 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  14.                         Case 51 To 60
  15.                             btuarray(usx1, usy1).Text = "第 6 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  16.                         Case 61 To 70
  17.                             btuarray(usx1, usy1).Text = "第 7 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  18.                         Case 71 To 80
  19.                             btuarray(usx1, usy1).Text = "第 8 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  20.                         Case 81 To 90
  21.                             btuarray(usx1, usy1).Text = "第 9 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  22.                         Case 91 To 100
  23.                             btuarray(usx1, usy1).Text = "第 10 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  24.                         Case 101 To 110
  25.                             btuarray(usx1, usy1).Text = "第 11 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  26.                         Case 111 To 120
  27.                             btuarray(usx1, usy1).Text = "第 12 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  28.                         Case 121 To 130
  29.                             btuarray(usx1, usy1).Text = "第 13 區域" & "  第" & " " & ksj - 1 & " " & "區塊"
  30.                     End Select
  31.                 Next
複製代碼

作者: GBKEE    時間: 2012-12-21 17:37

本帖最後由 GBKEE 於 2012-12-22 08:45 編輯

回復 1# mark15jill
  1. Sub Ex()
  2.     For ksj = 11 To nn Step 10
  3.         For x = -1 To 8
  4.             btuarray(usx1, usy1).Text = "第 " & Int(ksj / 10) + 1 & " 區域  第  " & ksj + x & " 區塊"
  5.         Next
  6.     Next
  7. 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
  1. Sub Ex()
  2.     For ksj = 1 To nn Step 10
  3.         For x = -1 To 8
  4.             btuarray(usx1, usy1).Text = "第 " & Int(ksj / 10) + 1 & " 區域  第  " & ksj + x & " 區塊"
  5.         Next
  6.     Next
  7. 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/)