相关文章推荐
英勇无比的大蒜  ·  [Reverse]PC微信(一)个人数据基址 ...·  1 年前    · 
玩篮球的跑步机  ·  pycharm控制台字体大小设置-掘金·  2 年前    · 
坏坏的蚂蚁  ·  iOS自动化测试:WebDriverAgen ...·  2 年前    · 
博学的柳树  ·  Troubleshooting CI/CD ...·  2 年前    · 
会搭讪的卤蛋  ·  巢湖API的Azure ...·  2 年前    · 
Code  ›  查找字符串是否位于二维VBA Excel数组中开发者社区
数组 二维 arr vba数组
https://cloud.tencent.com/developer/ask/sof/112121006/answer/125673535
朝气蓬勃的圣诞树
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 查找字符串是否位于二维VBA Excel数组中

Stack Overflow用户
提问于 2015-06-04 20:05:02
EN

我有一个很好的函数,我一直对一个一维Excel数组使用它来检查字符串是否在数组中:

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1)
End Function

不幸的是,在使用它检查二维数组时,它不能工作,就像我在这里所做的那样:

Sub new_idea_filter()
home_sheet = ActiveSheet.Name
c = 1
Dim myfilters(1 To 4, 1 To 5000)
myfilters(1, 4) = "Test"
If IsInArray("Test", myfilters()) = True Then
    killer = True
End If
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1)
End Function

它在函数中不断出错,表示下标超出了范围,有人想我如何检查字符串是否在二维数组中?

6 10.5K 0 票数 3
EN
arrays
vba
excel

Stack Overflow用户

发布于 2017-10-08 16:46:41

@Siddharth上面的答案除了 Application.Match 函数:-)外,还与 Filter 完美地工作在一起。-我的解决方案只尝试使用OP Filter 函数:由于过滤器函数需要一个1昏暗的数组,所以数组被分割成部分。

A)使用原始筛选函数而不是匹配加上错误处理的替代解决方案

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
Dim i      As Long
If nDim(arr) = 1 Then
  IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1)
Else    ' allows using filter function in portions
  For i = 1 To UBound(arr, 2)
      If (UBound(Filter(Application.Transpose(Application.Index(arr, 0, i)), stringToBeFound)) > -1) Then IsInArray = True: Exit For
  Next i
End If
End Function

帮助函数获取数组维数

Function nDim(ByVal vArray As Variant) As Long
' Purp: get number of array dimensions
' Site: http://support.microsoft.com/kb/152288
  Dim dimnum     As Long
  Dim ErrorCheck As Variant
  On Error GoTo FinalDimension
  For dimnum = 1 To 60000
      ErrorCheck = LBound(vArray, dimnum)
FinalDimension:
  nDim = dimnum - 1
End Function

B)递归解决方案 使用原始的过滤函数而不是匹配加上错误处理

Function IsInArray(stringToBeFound As String, arr As Variant, Optional i As Long = 0) As Boolean
Select Case i
       Case -1:                                                             ' stop 2dim calls
       Case 0: IsInArray = IsInArray(stringToBeFound, arr, nDim(arr))       ' start recursive call
       Case 1: IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1)    ' 1dim array
       Case Else           ' allows using filter function in portions
            If (UBound(Filter(Application.Transpose(Application.Index(arr, 0, i)), stringToBeFound)) > -1) Then
 
推荐文章
英勇无比的大蒜  ·  [Reverse]PC微信(一)个人数据基址-阿里云开发者社区
1 年前
玩篮球的跑步机  ·  pycharm控制台字体大小设置-掘金
2 年前
坏坏的蚂蚁  ·  iOS自动化测试:WebDriverAgent接口 - 简书
2 年前
博学的柳树  ·  Troubleshooting CI/CD | GitLab
2 年前
会搭讪的卤蛋  ·  巢湖API的Azure synapse连接与typeORM的连接
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号