2014-11-06 147 views
1

我有輸入數組{{1,4},{1,3},{1,4,7}}得到一個陣列VBA的每個子陣列的長度

Dim array1() As Long 
ReDim array1(3, 3) 
array1(1, 1) = 1 
array1(1, 2) = 4 
array1(2, 1) = 1 
array1(2, 2) = 3 
array1(3, 1) = 1 
array1(3, 2) = 4 
array1(3, 3) = 7 

我想有輸出陣列(其是每個子陣列的長度){2,2,3} 我想使用的for循環如下

Dim i As Long 
i = UBound(array1, 1) 

Dim outputarray() As Long 
ReDim outputarray(i) As Long 
For j = 1 To i 
    outputarray(i) = UBound(array1(i), 2) 'ERROR APPEAR 
Next j 

我增加Option Base 1

+0

太好了!問題是什麼? – 2014-11-06 04:14:56

+0

我想爲上面的情況生成一個輸出數組{2,2,3}。我想要一個普通的案例。 – useR 2014-11-06 05:54:01

回答

2

我同意托馬斯的回答。

如果你發現自己想知道的數組中填充的數組值的數量,你可以考慮以下幾點:

  • 開始與第一排,和最右邊的在價值陣列。所以你的for循環實際上是兩個循環 - 一個通過第一維,一個通過第二維。
  • 向左移動數組,直到遇到非零值。保持零值的總數值。當您運行到非零值時,從數組的第二維減去總的零值。這會給你以前尋找的「長度」。

因此,例如:

Dim i As int 
Dim j As int 
Dim h As int 
Dim w As int 
h = UBound(array1, 1) 
w = UBound(array1, 2) 
Dim rowVals as int 
Dim arrVals as int 

For i = 0 To h 
    rowVals = 0 
    For j = w to 0 Step -1 

     if array1(i,j) = 0 Then 
      exit for 
     else 
      rowVals = rowVals + 1 
     end if 
    Next 
    arrVals = arrVals + rowVals 
Next 
3

每個的長度子陣列保持相同,它總是3你的情況。你的redim已經定義了你想得到的數字。所以沒有必要嘗試像檢索一樣來檢索它。

,你不

array1(1, 3) 
array1(2, 3) 

移動任何值不會影響您的陣列的尺寸的事實。你會在這些what-you-think-empty數組的單元格中找到值,並且它將爲0,因爲你將數組聲明爲long。如果你將它聲明爲字符串,你會在它們中找到一個空字符串,既不是空也不是「無」。

你必須輸入數組{{1,4,0​​},{1,3,0},{1,4,7}}

如果你的目的是要找到其中的數組的元素是0因爲你沒有移動任何東西,這是另一個與你的數組長度無關的故事。