添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
有胆有识的仙人掌  ·  在 Azure Boards ...·  1 年前    · 
性感的沙滩裤  ·  c# - ICommand - ...·  1 年前    · 

如何查找一个数组内,某个元素的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: filter是office365专有的一个工作表函数,相较VBA中的filter数组函数可以省去join和split两个环节,但目前还不知该如何正确调用它,有兴趣可以了解下:support.microsoft.com/zh-cn/office/filter-函数-f4f7cb66-82eb-4767-8f7c-4877ad80c759 Thank you all the same!