看板 Visual_Basic 關於我們 聯絡資訊
各位大大好,小弟初學vba,想請問陣列要如何直接賦值呢 我試過幾種方法 ---------------------------------------------------------------- ' 方法一: 失敗 Dim arr(0 To 2) As Integer A = Array(10, 20, 30) ---------------------------------------------------------------- ' 方法二:無法指定至陣列 Dim arr(2) arr = Array(10, 20, 30) ---------------------------------------------------------------- ' 方法三: 成功 Dim arr arr = Array(10, 20, 30) 我的疑問是 1. 我可以理解Array回傳的是variant型態,可是這樣為什麼方法二也不行呢? 2. 如果一定要使用動態陣列且variant型態,這樣的話會減慢運行的效能嗎? 3. 有什麼方法可以直接將固定儲存格的內容寫進陣列的嗎?例如: arr = Range("A1:A3").Value 這樣的寫法 (當然這樣寫就失敗了 >.<) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.223.196 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1485439131.A.3FE.html ※ 編輯: marki (36.239.223.196), 01/26/2017 22:01:22
MashiroX421: 方法一的話,arr跟A並無相關性 01/27 00:06
MashiroX421: 方法二,這樣寫等於是把陣列指定到陣列,會有矛盾 01/27 00:07
MashiroX421: 寫成式子會像:arr(無,無,無)=Array(10,20,30) 01/27 00:08
MashiroX421: 問3使用迴圈寫到陣列 http://imgur.com/kfuSNEu.png 01/27 00:15
waiter337: 直接dim的時後就要給值了唷 01/27 01:37
waiter337: dim arr(10,20,30) 01/27 01:37
waiter337: 但陣列使用上直接賦值我感覺我沒用過(應該是不太會用) 01/27 01:38
waiter337: 而且redim 常常幾乎跟著用到 01/27 01:41
waiter337: 但我不建議使用redim preserve 01/27 01:42
waiter337: 大部份我們不是很專業不是很大量,那就乾脆拿大一點的盤 01/27 01:42
waiter337: 子裝花生比較快 01/27 01:42
waiter337: 建議基本看看之後直接redim成很大的二維陣列 01/27 01:43
waiter337: redim preserve(只限用一維陣列) 一排資料 01/27 01:44
waiter337: 無法使用在二維陣列 ,譬如(100列 x 99行)假設要在加陣 01/27 01:46
waiter337: 列,我印像是如果增加位置可以,但只能加最底下橫列 01/27 01:47
waiter337: 所以一開始我就懶惰的關係,我一開始就會先開好大小 01/27 01:48
waiter337: 只要redim 從最後一排+1的位置開始就可以 01/27 01:50
waiter337: 或者我記反了,只能增加最右邊那直行 01/27 01:50
MashiroX421: 直接dim arr(10,20,30)這樣是一開始就宣告為三維陣列 01/27 07:13
MashiroX421: 與原PO一開始使用array放入的一維陣列不一樣 01/27 07:14
MashiroX421: 另外redim preserve實際上可以用在二維陣列 01/27 07:25
MashiroX421: 雖然它只能用在改變陣列中最後一維的上下限 01/27 07:25
MashiroX421: 但可以透過使用工作表函數Transpose,將一、二維進行 01/27 07:26
MashiroX421: 互換,再把需要的元素放入後,再轉置過來,亦可達成 01/27 07:27
waiter337: 原來如此 01/27 11:21
waiter337: 沒錯做到這裡 我都得在試錯個一兩次 經驗還不太多 哈 01/27 11:22
waiter337: 哈 01/27 11:22
waiter337: 應該是這樣啦 dim arr()={10,20,30} 01/27 11:26
waiter337: 假如我要用成 01/27 11:27
waiter337: 1,2,3 01/27 11:27
waiter337: 4,5,6 01/27 11:27
waiter337: 7,8,9 01/27 11:27
waiter337: 的3x3 二維陣列 01/27 11:27
waiter337: 就要dim arr(,) ={ {1,2,3} , {4,5,6} , {7,8,9} } 01/27 11:28
waiter337: 或者 01/27 11:28
waiter337: arr(0,0) = 1 01/27 11:28
waiter337: arr(0,1) = 2 01/27 11:29
waiter337: arr(0,2)=3 01/27 11:29
waiter337: arr(1,0)=4 01/27 11:29
waiter337: arr(1,1)=5 01/27 11:29
waiter337: arr(1,2)=6 01/27 11:29
waiter337: arr(2,0)=7 01/27 11:29
waiter337: arr(2,1)=8 01/27 11:29
waiter337: arr(2,2)=9 01/27 11:30
waiter337: 這種一開始要先dim arr 下一行 redim arr(2,2) 01/27 11:30
fumizuki: 1. Array 傳回Variant,已固定型態的變數都無法接收 01/27 11:40
fumizuki: 2. 宣告時決定陣列大小、維度,亦無法接收 Variant 值 01/27 11:42
fumizuki: 是VBA還是.NET ? .NET 才能在宣告變數時初始化 01/27 11:43
waiter337: im arr(,) ={ {1,2,3} , {4,5,6} , {7,8,9} } 這個vba 01/27 14:55
waiter337: 好像不能用 抱歉 01/27 14:56
waiter337: 是vb跟.net才能用 01/27 14:56
waiter337: 更正vba在dim的時候不能順便賦值 01/27 14:59
waiter337: 包含dim arr(10,20,30) 這個也不行 01/27 14:59
waiter337: 你的方法一,因為A跟Arr是兩個不同變數 01/27 15:01
waiter337: 感謝,我也學到很多 01/27 15:04
waiter337: http://i.imgur.com/SbABe4M.jpg 01/27 15:05
waiter337: 可以參考一下唷 01/27 15:05
marki: 謝謝各位大大教學 01/28 10:03
waiter337: 不過奇怪的是 為什麼arrx是從(1,1)開始的 01/28 18:42