如何在变体中找出使用范围的大小而忽略空的范围

nik*_*iko 1 excel vba

好的,现在我在使用变体时遇到了另一个问题.我已成功将一个变体复制到其他变体.现在我如何确定新变体的大小

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

在完成2720行中的一些计算之后,我已将2020行复制到新变量中,而新变体中2020到2720的其他值都为空.现在我必须知道新变种的大小.我试过这些

ubound(var2,1) ' its giving the size as 2721 not as 2020
Run Code Online (Sandbox Code Playgroud)

我们怎样才能找出变量的大小到使用的范围而忽略空的范围.因为当我们在循环期间执行操作或基于另一个变体创建另一个变体时,大小起着至关重要的作用.并且我们不能在不提及其尺寸的情况下定义变体?我需要进行拆分操作并将它们添加到变量中,如果是这种情况我不知道执行了多少拆分操作以及有时会取出多少变量20或40,这应该复制到变量中,因此我们需要一个变量这是动态的或可以调整大小的东西

bre*_*tdj 5

根据jonsca的评论,如果您知道已经编写或操作了多少条记录(2020),那么您可以从最后的2721记录大小中删除数组

这里的诀窍是你无法重新构建数组的第一个维度并保留现有数据,因此我们需要一个三阶段的解决方法

  1. 创建第二个数组,其水平大小等于数组1的垂直大小,垂直大小等于数组1的horizo​​natl大小(因此,而不是2720行乘4列,我们使用4行乘2720列)
  2. 在代码端将列从2720切换到2020并保留书面记录
  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
Run Code Online (Sandbox Code Playgroud)