Loading [MathJax]/jax/output/CommonHTML/config.js
查找字符串是否位于二维VBA Excel数组中
社区首页 >问答首页 >查找字符串是否位于二维VBA Excel数组中

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

Stack Overflow用户
提问于 2015-06-04 12:05:02
回答 6查看 10.5K关注 0票数 3

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

代码语言:javascript
代码运行次数:0
复制
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean

    IsInArray = (UBound(Filter(arr(), stringToBeFound)) > -1)

End Function

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

代码语言:javascript
代码运行次数:0
复制
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

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

EN

Stack Overflow用户

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

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

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

代码语言:javascript
代码运行次数:0
复制
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

帮助函数获取数组维数

代码语言:javascript
代码运行次数:0
复制
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)
  Next

FinalDimension:
  nDim = dimnum - 1
End Function

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

代码语言:javascript
代码运行次数:0
复制
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
               IsInArray = True
            Else            ' recursive calls (2dim array)
               IsInArray = IsInArray(stringToBeFound, arr, IIf(i + 1 > UBound(arr), -1, i + 1))
            End If
End Select
End Function
票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30653135

复制
相关文章
[剑指offer] 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
尾尾部落
2018/09/04
2.1K0
[剑指offer] 二维数组中的查找
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
用户3003813
2018/09/06
1.9K0
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
崩天的勾玉
2021/12/20
1.5K0
二维数组中的查找
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1946753
后端码匠
2021/08/18
1.7K0
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
MickyInvQ
2021/10/26
1.6K0
二维数组中的查找代码
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 代码 public class Solution { public boolean Find(int target, int [][] array) { if(array == null || array.length == 0) return false;
desperate633
2018/08/22
1.2K0
算法-二维数组中的查找
该文介绍了如何在一个由数字组成的二维数组中查找指定元素,并使用动态规划方法进行优化。
chaibubble
2018/01/02
1.5K0
算法-二维数组中的查找
二维数组中的查找_01
题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 观察右上交可以做起点,左小下大 public boolean Find(int target, int [][] array) { //以右上角为起点检索 int height=array.length; int width=array[0].len
名字是乱打的
2021/12/23
1K0
一维数组二分法查找_excel二维数组查找匹配
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
全栈程序员站长
2022/09/22
2930
VBA判断是否连接公司内网/是否联网(Excel)
Function 测网(url) On Error Resume Next cmdping = "ping " & url & " -n 1" Set oExec = CreateObject("Wscript.shell").exec(cmdping) Do Until oExec.stdout.AtEndOfStream strline = strline & oExec.stdout.readline() & Chr(13) Loop 测网 = 0 If InStr(strline,
林万程
2018/06/20
2.3K0
VBA一维数组转二维数组
在Excel里从单元格读取数据,获取的是一个二维的数组,这也是数组与单元格交互最常用的方式。
xyj
2021/06/22
2.3K0
VBA一维数组转二维数组
在Excel中通过VBA对Word文档进行查找替换
哆哆Excel
2023/09/09
6550
在Excel中通过VBA对Word文档进行查找替换
二维数组的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。        当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。针对这个问题,我们不妨也从一个具体的例子入手。下面我们以在题目中给出的数组中查找数字7为例来一步步分析查找的过程。        我们发现如下规律:首先选取数组中右上角的数字。如果该数字等于要查找的数
猿人谷
2018/01/17
1.3K0
java二维数组查找
问题:在一个二维数组中,每行每列都递增排序,在这个数组中查找一个数字,如果存在返回true,否则返回flase。
全栈程序员站长
2022/09/02
5600
java二维数组查找
LeetCode120|二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
码农王同学
2020/10/27
6900
Sword To Offer 001 - 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
Reck Zhang
2021/08/11
4940
【剑指offer】二维数组中的查找
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
5580
剑指offer:二维数组中的查找
一种简单的方法就是整个数组都遍历,当然,数组从左到右,从上到下都是有序的,如果你遍历整个数组的话,那就浪费了数组的局部有序性了。
帅地
2019/03/11
5750
VBA: 判断动态数组是否为空
文章背景:在VBA代码中,有时需要创建动态数组,然后对该动态数组进行操作。如果该数组为空,在使用一些函数(如Lbound,Ubound等)时,代码会报错。因此,需要事先判断动态数组是否为空。下面介绍一个判断动态数组是否为空的自定义函数。
Exploring
2022/09/20
4.9K0
LeetCode题解——二维数组查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
码上积木
2021/01/25
1.6K0

相似问题

VBA Excel二维数组

43

Excel VBA -Sorting a二维数组

21

Excel vba变体数组查找

15

Excel VBA:二维数组搜索,检查单元是否为空

10

excel vba -高效循环二维数组

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 腾讯技术创作特训营
该页面内容是否对您有价值?