VBA,如何查找一个数组内,某个元素的index,和序号(从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

 

 

 

  • 序号不同于index
  • 序号的定义
  • index定义

    

取序号,index都有两种思路

  • 1用循环+if判断 去取
  • 用 match 去取序号,然后根据lbound() 等算出来index---前期假设 index是必须连续的

 

index可以为负数,整数,0,但必须连续

 

 

 

 

 

 

 

 

Sub ponygo1()
Dim arr2(3 To 15)

arr1 = Array(7, 5, 1, 2, 3, 4, 5, "6", 7, 8, 9, 0)


x1 = InputBox("请输入要查找的数字,必须是1位数")
'以后可以增加判断
'这个inputbox输入的是字符串,并且还需要判断位数,判断数字库是否落在里面?



Debug.Print "--------常规数组测试------------"

'用循环+判断 也可以取到序号和index,还更方便点
m = 1
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
Next
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
Next
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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值