[算表] Excel定義多維陣列的長度

作者: Lanjaja   2021-03-23 18:36:11
軟體:Excel
版本:Office 2013
各位先進好!
我想請問一下在定義多維動態陣列時,
假如我需要計算一個適當的大小,
例如
變數經過運算後得到三個變數值mini = 3, maxi = 15, size = 8
想讓程式根據程式過程中得到的變數值而量身訂做一個多維矩陣
Dim matrix(mini To maxi,1 To length) as integer
就會出錯,說length必須要是常數,
可是mini To maxi都沒有問題,
就只有length有問題,
好奇怪!
不知道板上先進能不能解釋一下問題出在哪裡?該如何解套?
感謝各位先進的幫忙~
作者: soyoso (我是耀宗)   2021-03-23 20:14:00
mini To maxi都沒有問題,就只有length有問題,這方面可以只以mini To maxihttps://i.imgur.com/0HLJV8w.jpeg還是有問題的先宣告matrix() as ....再redim matrix(mini to maxi, 1 to....) ...另外內文變數值要在執行redim前正確取得
作者: Lanjaja   2021-03-25 01:37:00
請問s大 我如果一開始先dim matrix() as 程式會不會以為我只是在定義一維向量?但其實我想要的是二維向量我試的結果 似乎是多維度的最後一個維度長度不能是變數S大因為用一維的 所以maxi會出現問題還是我有誤解?
作者: soyoso (我是耀宗)   2021-03-25 07:22:00
不是,用一維會誤會的話,一樣也用二維Dim matrix(mini To maxi,1 To length) as integer,標記在lengthDim matrix(mini To maxi, 1 To 10) As Integer,標記在maxiDim matrix(mini To 10, 1 To 10) As Integer,標記在mini必須是常數運算式所以維度的上限(上標)或是下限(下標)只要是變數就會錯誤,而非最後一個不能是變數dim matrix()是動態的,不會只是定義一維,就看之後redim補充一下,內文寫到length必須要是常數,可是mini To maxi都沒有問題,這並不是指mini To maxi是正確的,而是在取得1 To length這個上下限(標)時就產生錯誤,所以標記在length這個地方
作者: Lanjaja   2021-03-25 14:51:00
謝謝s大,接下來就有個問題,我應該要怎麼把length minimaxi的數值取出來變常數?例如我定義另一個const lgth asintger = length 會發生錯誤 可是這些變數是在程式計算過程中計算出來的 我事先沒辦法知道 也不想中斷程式 所以想知道如何把mini maxi length的數值取出來擺在matrix定義中而不會發生錯誤?謝謝您的幫忙
作者: soyoso (我是耀宗)   2021-03-25 15:54:00
那不要在程序內宣告而是移到模組Module的最上方宣告,寫入值後也可以用於其他程序內,不同模組的話內public
作者: Lanjaja   2021-03-26 23:03:00
不太懂s大的意思 是說如果在模組最上用public宣告 可是變數還是變數 matrix()就會把public變數當常數看待嗎?
作者: soyoso (我是耀宗)   2021-03-27 06:38:00
寫入值到變數後,如果不再重新寫入值,那變數內的值也就是不變的常數調整一下,除不再重新寫入值外,或重新寫入值都是相同時,也會是常數
作者: Lanjaja   2021-03-29 03:41:00
其實變數之後還會用到 所以我另外創一個變數去等於length還是會發生錯誤的訊息 所以不知道是不是VBA不能接受變數
作者: soyoso (我是耀宗)   2021-03-29 06:35:00
創一個變數去等於length還是會發生錯誤的訊息指的是什麼,是指const lgth as intger = length這樣會有錯誤訊息嗎?如果是的話,是的,無法這樣寫,這原po測試就發生錯誤訊息了;那變數之後用的到,這裡"之後"指的如是執行巨集過程內要將這個變數保留,於另一個程序內取得的話,就如我03/2515:54回文的方式。這方面就試試,試了無法達成,就提供如何寫的和要的結果,會比較清楚
作者: waiter337 (給開司一罐蘇格登)   2021-04-04 01:15:00
dim matrixredim matrix(mini To maxi,1 To length)

Links booklink

Contact Us: admin [ a t ] ucptt.com