如何查找一个数组内,某个元素的index是多少?
-
如果element元素唯一,可以用match查,
-
但是 application.match 比 worksheetfunction.match() 函数更健壮
-
如果不唯一呢
-
用match 只能返回第一个查到的元素的index
-
注意 match() 查找 5 和 "5" 都不一样
-
Application.Match(5, arr1, 0)
-
Application.Match("5", arr1, 0)
-
Application.Match 如果查不到,可以返回一个错误值,不会中断程序
-
WorksheetFunction.Match 如果查不到,会直接程序中断
match反查的局限性:
-
1只能查重复元素的第1个index
-
2需要把查找内容加引号""
-
3 match作为工作表函数,index默认从1开始,即使array本身index从0开始!
Sub jackma_arrtest1()
Dim arr1
arr1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "5")
Debug.Print Application.Match(5, arr1, 0)
Debug.Print Application.Match("5", arr1, 0)
Debug.Print Application.Match(11, arr1, 0)
Debug.Print Application.WorksheetFunction.Match(5, arr1, 0)
Debug.Print Application.WorksheetFunction.Match("5", arr1, 0)
'Debug.Print Application.WorksheetFunction.Match(11, arr1, 0) '这句会报错
End Sub
For j = LBound(arr1) To UBound(arr1)
If arr1(j) = x1 Then
Debug.Print x1 & "在arr1中的是第" & m & "个元素"
Debug.Print x1 & "在arr1中是index是" & j
End If
m = m + 1
Debug.Print
'序号是我自己定义的,总是从1开始
i1 = Application.Match(x1, arr1, 0)
'match局限性,总是从1开始
Debug.Print x1 & "在arr1中的是第" & i1 & "个元素"
y1 = i1 - (1 - LBound(arr1))
Debug.Print x1 & "在arr1中是index是" & y1
Debug.Print
Debug.Print "此时m=" & m & "所以这下面得换变量n,或者重置m=1"
Debug.Print
'---------------------不规则数组测试-----------------------------
Debug.Print "---------不规则数组测试-------------"
'所谓的不能给数组赋值
'Dim arr2(3 To 15) 这里结合是错误的
'array()函数返回的必须是变量,或变量对等的动态数组,不能赋值给静态数组
'arr2 = [{3, 4, 5, "6", 7, 0, 1, 2, 8, 9}] 也不行
'arr2() = Array(3, 4, 5, "6", 7, 0, 1, 2, 8, 9)
arr2(3) = 1
arr2(9) = "6"
arr2(15) = 15
n = 1
For j = LBound(arr2) To UBound(arr2) '这里j最好也换变量,这样是危险的,这次没出错是因为重新给j界定了起点终点
If arr2(j) = x1 Then
Debug.Print x1 & "在arr2中的是第" & n & "个元素"
Debug.Print x1 & "在arr2中是index是" & j
End If
n = n + 1
Debug.Print
i2 = Application.Match(x1, arr2, 0)
Debug.Print x1 & "在arr2中的是第" & i2 & "个元素"
y2 = i2 - (1 - LBound(arr2))
Debug.Print x1 & "在arr2中是index是" & y2
Debug.Print
'if 可以exit for 不用 end if搭配?
End Sub
如何查找一个数组内,某个元素的index是多少?如果element元素唯一,可以用match查, 但是 application.match 比 worksheetfunction.match() 函数更健壮 如果不唯一呢 用match 只能返回第一个查到的元素的index注意 match() 查找 5 和 "5" 都不一样 Application.Match...
数组是一个相当好的变量集合,里面可以存放许多按实际要求但是不可意料其值的值!
要使用数组,首先要定义数组,方能使用,如何定义,在上一篇已做了说明,在此不再阐述!
数组根据不同的需求,可分为静态数组和动态数组,静态数组存储欲先设置话的值,相当于里面存储一个或多个静态变量的值;动态数组根据需要,可随时改变数组长度,并随时能修改存储的值;
本文提供几个简单的例子,以方便各位的学习!
总结,简单的说,就是VBA里的数值,index默认从0 开始,而从工作表来源的函数,默认index从1开始
用VBA的数值array() 或者 dim 或者 redim 这几种方法,默认index从0开始
当然 dim 或者 redim 可以声明从1开始或从其他开始
而从工作表区域赋来的数组,无论是1维还是2维,index都从1开始
[{}] 这种赋值方式,我认为是偏工作表的,
因为 [a1:b5] 就等同于 range("a1;b...
public static void main(String[] args) {
ArrayList<String> objArray = new ArrayList<String>();
ArrayList<...
2201_75674929: