如何找出variables中使用范围的大小,忽略空的范围

好吧现在我在处理它时已经有另一个变体的问题了。 我成功地将一个变体复制到其他。 现在我该如何确定新变种的大小

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

好吧,在2720行中进行了一些计算后,我已经将2020行复制到了新变体中,而其他值从2020到2720在新变体中是空的。 现在我必须知道新变种的大小。 我已经尝试过这些

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

我们怎样才能找出variables的大小,忽略空的范围。 因为当我们在循环中执行操作或基于另一个variables创build另一个variables时,大小起着至关重要的作用。 而且我们不能定义一个变体而不提及它的尺寸? 我需要做拆分操作,并将它们添加到一个变体,如果是这种情况,我不知道有多less拆分操作执行,有多lessvariables有时20或40取出,这应该被复制到变体,所以我们需要一个变种这是dynamic的或可以调整的东西

根据jonsca的评论,如果你知道有多less条logging已被写入或操作(2020),那么你可以从2721logging的大小截止数组

这里的技巧是你不能redim数组的第一维并保留现有的数据,所以我们需要一个三阶段的解决方法

  1. 创build水平大小等于数组1的垂直大小的第二个数组,垂直大小等于数组1的水平大小(而不是2720行乘4列,我们使用4行乘2720列)
  2. 在代码结束时将2720到2020的列删除,并保留写入的logging
  3. 将第二个数组转储回Excel,但使用Transpose将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 

最简单的方法是保持var2数组完整,当遍历它时,只需停在索引2020处(不要继续到UBound(var2,1) = 2721)。 有人可能会认为这不是很干净。 在我看来,任何事情都不值得。