UBound() = -1是什么意思?
Sub怎样从一个数组中找出另一个数组不存在的内容2()Dimb(),c(),d()Dimn,jAsIntegerb=Array(1,2,3,4,5,6,7,8,9,10,...
Sub 怎样从一个数组中找出另一个数组不存在的内容2()
Dim b(), c(), d()
Dim n, j As Integer
b = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
c = Array(1, 2, 3, 4, 5, 6, 7, 8)
n = 1
For j = LBound(b) To UBound(b)
If UBound(VBA.Filter(c, b(j))) = -1 Then
ReDim Preserve d(1 To n)
d(n) = b(j)
n = n + 1
End If
Next
MsgBox Join(d, ",")
End Sub
请问,这段代码中If UBound(VBA.Filter(c, b(j))) = -1 Then,为什么要判断是否等于-1,等于-1代表什么,还有别的值么?分别是什么意思!谢谢 展开
Dim b(), c(), d()
Dim n, j As Integer
b = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
c = Array(1, 2, 3, 4, 5, 6, 7, 8)
n = 1
For j = LBound(b) To UBound(b)
If UBound(VBA.Filter(c, b(j))) = -1 Then
ReDim Preserve d(1 To n)
d(n) = b(j)
n = n + 1
End If
Next
MsgBox Join(d, ",")
End Sub
请问,这段代码中If UBound(VBA.Filter(c, b(j))) = -1 Then,为什么要判断是否等于-1,等于-1代表什么,还有别的值么?分别是什么意思!谢谢 展开
3个回答
展开全部
VBA.filter(c,b(j)) 先从这里分析
c是一个数组 b(j)是b数组的一个元素,
filter这里的意思就是从c数组中找出包括b(j)的所有元素,构成一个新的数组。
vba.filter(c,b(j))这里的意思就是从c中找出包含b(j)的所有元素构成一个新的数组。
再说ubound(参数)这个函数的作物,这里的参数必须是一个数组,而函数的返回值是这个参数数组的最大下标。
而结合起来看,就是如果c中包含了b(j)的元素,那么会构成一个新的数组,最大下标起码是0,而不包含该元素时,自然b(j)的元素,那么返回-1
c是一个数组 b(j)是b数组的一个元素,
filter这里的意思就是从c数组中找出包括b(j)的所有元素,构成一个新的数组。
vba.filter(c,b(j))这里的意思就是从c中找出包含b(j)的所有元素构成一个新的数组。
再说ubound(参数)这个函数的作物,这里的参数必须是一个数组,而函数的返回值是这个参数数组的最大下标。
而结合起来看,就是如果c中包含了b(j)的元素,那么会构成一个新的数组,最大下标起码是0,而不包含该元素时,自然b(j)的元素,那么返回-1
更多追问追答
追问
ubound这个返回值-1,我怎么在帮助文件里找不到相关信息,ubound没有提到返回值问题,为什么会是-1,而不是-2,-3等其他值
可以改成If UBound(VBA.Filter(c, b(j))) < 0 Then么?
追答
ubound是返回数组的最大下标,可能无数组或出错什么的返回-1,己我的开发经验未遇到-2 -3等情况,但按你所说的改成<0是没任何错误
展开全部
oaita说的不对。VBA.Filter本身是自动返回数组的,-1表示不包含,也就没有返回一个数组,也就是VBA.Filter不构成数组。
一下来自MSDN
VBA.Filter返回以零为基础的 array,其中包含以特定过滤条件为基础的字符数组集.
Dim MyIndex
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = VBA.Filter(MyArray, "Mon") 'MyIndex(0) 包含 "Monday"。
也就是说包含的时候返回一个数组,否则不构成数组,UBound(VBA.Filter返回值)为-1
掉坑里了,提交后发现已经采纳了。
一下来自MSDN
VBA.Filter返回以零为基础的 array,其中包含以特定过滤条件为基础的字符数组集.
Dim MyIndex
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = VBA.Filter(MyArray, "Mon") 'MyIndex(0) 包含 "Monday"。
也就是说包含的时候返回一个数组,否则不构成数组,UBound(VBA.Filter返回值)为-1
掉坑里了,提交后发现已经采纳了。
更多追问追答
追问
额,我始终在关注
追答
白写了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ubound()=-1,指某一数组的最大下标为-1
1、这是VBA中的函数。ubound和lbound分别对应最大下标和最小下标。
2、括号内引用的参数为数组。
3、二者的范围为均整数(负整数,0,正整数)。
4、一般设定其范围为1到某个自然数或者0到某个自然数,便于计数。极少有使用负数的情况,当然并不违规。
可复制如下代码到VBA中运行理解相关函数。
Sub array_()
Dim my_Array(-10 To -1) As Single
For i = -10 To -1
my_Array(i) = i * 2
Debug.Print my_Array(i)
Next
Debug.Print UBound(my_Array)
Debug.Print LBound(my_Array)
Debug.Print my_Array(UBound(my_Array))
Debug.Print my_Array(LBound(my_Array))
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询