Board logo

標題: [發問] 宣告問題 [打印本頁]

作者: PKKO    時間: 2015-5-6 10:12     標題: 宣告問題

超版大大們都會使用Option Explicit 來限制程式碼一定要宣告

但想請教一下,下面這行程式碼是rng=某位置的陣列,我要如何可以宣告出rng陣列的內容值都是BYTE呢?
rng=[a1].resize[7,7]
a=rng(1,1)
我原本的寫法會出現錯誤
dim rng as byte
或是dim rng() as byte
作者: stillfish00    時間: 2015-5-6 16:46

回復 1# PKKO
dim rng() as byte 沒錯啊,但你要賦值時要用CByte轉換
  1. Option Explicit
  2. Sub Test()
  3.     Dim i, j
  4.     Dim x(1 To 7, 1 To 7) As Byte
  5.    
  6.     With [a1].Resize(7, 7)
  7.         For i = 1 To UBound(x)
  8.             For j = 1 To UBound(x, 2)
  9.                 x(i, j) = CByte(.Cells(i, j).Value)
  10.             Next
  11.         Next
  12.     End With
  13. End Sub
複製代碼

作者: PKKO    時間: 2015-5-6 23:37

回復 2# stillfish00


    我剛測試,會失敗

但若真要如此,似乎宣告為BYTE有點辛苦,而且速度上無法增加多少對嗎?
作者: stillfish00    時間: 2015-5-7 20:17

回復 3# PKKO
1.  並非程式碼較長或使用迴圈速度一定就比較慢
2.  速度快不快是看你怎麼運算..如果只是取出7x7的值根本不用考慮到速度
3.  Byte類型的計算會比Integer快 , 你確定嗎?
作者: PKKO    時間: 2015-5-8 17:15

本帖最後由 PKKO 於 2015-5-8 17:18 編輯

回復 4# stillfish00

   S大您好

我並不確定BYTE會比integer快

因為我自己實驗的時候發現,沒宣告居然還比宣告為BYTE之後快= =?

我不曉得原因在哪~

主要是針對下列程式碼

一個7*7的陣列

想要一次七個比對一組六個號碼
看有幾個號碼符合

若符合用陣列將值記憶起來

下方是我的程式碼?

不曉得有沒有可以一次比對的程式碼?
或是比下方更快的程式碼?
  1. '宣告物件
  2. Dim D As Object
  3. Set D = CreateObject("SCRIPTING.DICTIONARY")  '字典物件
  4.        For q = 1 To 7
  5.             D.RemoveAll
  6.             For j = 1 To 7
  7.                 D.Add rng(j, q), j
  8.             Next
  9.             For j = 1 To y
  10.                 r = 0
  11.                 For k = 1 To 6
  12.                     If D.Exists(Rng2(j, k)) Then r = r + 1
  13.                 Next
  14.                 If r > 0 Then myArray1(r) = myArray1(r) + 1
  15.             Next
  16.         Next
複製代碼

作者: bobomi    時間: 2015-5-8 17:45

回復 5# PKKO


    你是在寫樂透方面的程式嗎
作者: PKKO    時間: 2015-5-8 20:32

回復 6# bobomi


    哈哈,無聊幫朋友寫的,我個人認為速度已經到極限了,但想說這裡高手雲集,可能還有更快的方式




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)