Vba 寻找一行代码的解释
vba有点陌生,我有个朋友给了我这句话: ReDim保留输入(1到UBound(输入,1),1到3)Vba 寻找一行代码的解释,vba,Vba,vba有点陌生,我有个朋友给了我这句话: ReDim保留输入(1到UBound(输入,1),1到3) 我不完全确定这一行在做什么,我知道ReDim可以更改数组中的值,而保留则保留除最后一行之外的所有数据。“To”语句在这个数组中到底做了什么?只是指定了重拨的次数吗?如果您查看文档,您将在括号中看到下标,如果您再往下看,您将看到下标的说明: 必需的。数组变量的维数;最多可以声明60个多维。subscripts参数使用以下语法: [lowerTo]上[,[lowerTo]上] 如果未在lower中显
我不完全确定这一行在做什么,我知道ReDim可以更改数组中的值,而保留则保留除最后一行之外的所有数据。“To”语句在这个数组中到底做了什么?只是指定了重拨的次数吗?如果您查看文档,您将在括号中看到下标,如果您再往下看,您将看到下标的说明: 必需的。数组变量的维数;最多可以声明60个多维。subscripts参数使用以下语法: [lowerTo]上[,[lowerTo]上] 如果未在lower中显式声明,则数组的下限由Option Base语句控制。如果不存在Option Base语句,则下限为零 这意味着您可以将数组
InputID
的大小从之前的任何值调整到第一个维度(从1调整到之前的上限)和第二个维度(从1调整到3)
ReDim Preserve
的行为与ReDim
不同。它可以仅修改最后一个维度并保留(现有)值(如果有)。你使用它的方式有点奇怪。我的意思是,通常情况下,最好是ReDim
一个数组到维度(尤其是最后一个维度),该数组能够覆盖要加载的元素的估计数量,再加上一些额外的元素。通常,应使用随添加的每个新元素而递增的变量,以便Redim保留该特定变量编号处的
Sub testRedimPreserve()
Dim sh As Worksheet, arr, arrToProcess, i As Long, k As Long
Set sh = ActiveSheet
arr = sh.Range("A2:A20"): k = 1
ReDim arrToProcess(1 To 2, 1 To UBound(arr)) 'redim at a maximum which surely will not be exceeded
For i = 1 To UBound(arr)
If arr(i, 1) = "x" Then
arrToProcess(1, k) = "Row " & i: arrToProcess(2, k) = "OK": k = k + 1
End If
Next i
'Since some values in the range are not "x", the obtained array must use Redim Preserve:
ReDim Preserve arrToProcess(1 To 2, 1 To k - 1) 'All the elements value up to k -1 are kept/preserved
'Since only the last dimension can be preserved, the obtained array must be trasnposed.
sh.Range("C2").Resize(k - 1, 2).Value = WorksheetFunction.Transpose(arrToProcess)
End Sub
1.a当然,如果你有一个更大的数组,你只需要它的前三列,你可以按照你朋友的建议继续
Redim arr(1到x)
表示维度的第一个元素是1。在这种情况下,它将保持元素从1到x。如果不以这种方式指定,我的意思是ReDim arr(x)
,则第一个元素为零。这是默认的VBA。它在0基中工作。除了在模块顶部使用选项Base 1
的情况我不确定你在@FaneDuru得到了什么,文档中提到了你所说的一切,问题是关于下标的。如果不知道第一个维度的边界,那么在错误调整答案上的arrayI注释的大小时,检查边界是很有用的。我想我是在评论OP问题。。。然后,我想也许可以给出一个更详细的答案,以便更好地理解
ReDim Preserve
的含义……你们两位再澄清一点,这一行将数组的物理大小从第一维的1更改为上限,从第二维的1更改为3?我猜是从1x1数组简化为((直到数据用完)x3)数组。@TrustedHippo:1。当你想在我的地址给我一个答案时,请评论我的答案。这样,就不用给我贴标签了。2.不,它不会改变第一维度中的任何东西。这是不可能的!这意味着第一个维度保持原样,第二个维度设置为3。如果数组的列数超过3列,这意味着在Redim Preserve
之后,它将具有相同的行数,但只有3列。从1点到3点。如果不是1到3
,而是只有'3',剩下的列将是4。从0到3。@TrustedHippo:3。我们在这里,当有人花费一些时间来回答我们的问题,我们认为答案“精彩/有用等”,我们勾选左边的代码侧复选框,使其接受的答案。这样,其他搜索类似问题的人就会知道答案解决了您的问题。。。