2011-09-20 41 views
1

好吧現在我在處理變體時遇到了另一個問題。我已成功將一個變體複製到其他變體。現在我該怎樣確定新變種的尺寸做了一些計算出的2720行後如何找出變量中使用範圍的大小,忽略空的變量

Var1 = Sheet7.Range("B2:E2721").Value ' 1st variant 
ReDim Var2(1 To UBound(Var, 1), 1 To UBound(Var, 2)) ' New variant 

好吧,我在新的變種複製2020行到新的版本,而其它值2020至2720年是空的。現在我必須知道新變種的大小。我試過這些

ubound(var2,1) ' its giving the size as 2721 not as 2020 

我們如何才能找出使用範圍的變體大小,忽略空的範圍。因爲當我們在循環中執行操作或基於另一個變體創建另一個變體時,大小起着至關重要的作用。我們不能定義一個變體而不提及它的尺寸?我需要做拆分操作並將它們添加到變體中,如果是這種情況,我不知道執行了多少次拆分操作以及有時取出20或40個變量,應將其複製到變體中,以便我們需要變體這是動態或東西可以,如果你知道有多少記錄已經被寫入或操縱(2020)被調整

+1

'在對2720行進行了一些計算之後,我已將2020行復制到新變體中 - 您是否可以在複製時跟蹤這個數字,這會讓事情變得更容易? – jonsca

回答

5

按jonsca的評論,那麼你可以在最後

切口從2721記錄大小的數組這裏的訣竅在於,您無法重新排列陣列的第一維並保留現有數據,所以我們需要三階段解決方法

  1. 創建第二個陣列,其水平尺寸等於陣列1的垂直尺寸,垂直尺寸等於陣列1的水平尺寸(而不是2720行乘4列,我們使用4行2720列)
  2. 剪切從2720列至2020年,在代碼結束並保留書面記錄
  3. 轉儲第二陣列返回到Excel,但使用轉置到2020年列轉4行的2020行* 4列如下

樣品(轉儲到第二張紙上的B2:E2021)

Sub VarExample2() 
Dim Var1() 
Dim Var2() 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Set ws1 = ActiveWorkbook.Sheets(1) 
Set ws2 = ActiveWorkbook.Sheets(2) 
Dim lngrow As Long 
Var1 = ws1.Range("B2:E2721").Value2 
'make our second array with columns equal to rows in the first, rows equal to columns 
ReDim Var2(1 To UBound(Var1, 2), 1 To UBound(Var1, 1)) 
'Put some data in the second array, but not all 2720 records 
For lngrow = 1 To 2020 
Var2(1, lngrow) = lngrow & " apple up on top" 
Var2(2, lngrow) = lngrow & " apple up on top next to the other one" 
Next lngrow 
'Cut the second array from 2720 columns to 2020 
ReDim Preserve Var2(1 To UBound(Var1, 2), 1 To lngrow) 
'Rotate the data from columns/rows into rows/columns in Excel 
ws2.[b2].Resize(lngrow, UBound(Var2, 1)) = Application.Transpose(Var2) 
End Sub 
+0

thx爲提示接受尼科:) – brettdj

+0

+ 1很好完成 –

1

最簡單的方法是保持var2陣列不變,並且在遍歷它時,只需在索引2020處停止(不要繼續到UBound(var2,1) = 2721)。有些人可能認爲這不是很乾淨。在我看來,其他任何事情都是不值得的。

+0

根據我的帖子和來自微軟的幫助[鏈接] http://msdn.microsoft.com/en-us/library/w8k3cys2.aspx,_「保留,可選。當您僅更改**最後**維的大小時,用於保留現有數組中數據的修飾符。「_ – brettdj

+0

好點。我的錯。從我的答案中刪除該建議。 –

+0

沒有probs,歡呼聲: – brettdj