gpt4 book ai didi

arrays - VBA 在数组中搜索数组? (检查一个数组的所有项是否存在于另一个数组中)

转载 作者:行者123 更新时间:2023-12-04 20:01:46 27 4
gpt4 key购买 nike

是否可以在字符串和/或整数数组中查找字符串和/或整数数组?如果是这样,那怎么办?
要在字符串数组中查找字符串,我使用如下代码:

If IsInArray(LowerFilmWidthArray, LowerFilmWidth) then
'Dos tuff
end if
一个功能是:
Function IsInArray(arr As Variant, myVal As Variant) As Boolean

IsInArray = Not IsError(Application.Match(myVal, arr, 0))
Debug.Print (IsInArray)

End Function
作为结果示例,假设您有一个整数数组 (1-10),并且您正在查看您的数组 (1,5,6) 是否在前一个数组(其中的所有项目)内,然后返回 True。在我的情况下,我正在全力寻找从第 3 列到最后一列的数据,这将构成我的数组,我尝试在另一个数组中查找所有项目并返回 true 或 false。
一个实际的例子:
Dim LowerFilmWidthArray
LowerFilmWidthArray = Application.Transpose(Evaluate("row(320:420)"))

Dim LowerFilmWidth As Integer
LowerFilmWidth = Array(ThisWorkbook.Worksheets("Machine Specification").Cells(320, 400,400,620)
'I get theese from a range and they might as well be strings and an undefined number of defined by 3 to last column with data

if isinarray(LowerFilmWidthArray,LowerFilmWidth) then
msgbox("Great Success!")
end if
由于最后一个“620”不在 LowerFilmWidthArray 内,因此结果将是错误的。
已编辑:
仍然无法让它发挥作用,我的直觉说,当我只需要从一个数组中取出每个项目并尝试在另一个数组中找到它并且只有当所有项目我正在寻找的存在于一个大数组中。
我已将我的转换为查找数组(较小的数组)以从一组范围内获取值,该范围始终是从 3 到最后一列的一行。
Dim LowerFilmWidth
LowerFilmWidth = ThisWorkbook.Worksheets("Machine Specification").Range(Cells(Cells.Find("Lower Film Width (mm)").Row, 3), Cells(Cells.Find("Lower Film Width (mm)").Row, LastColumn))
我希望这部分能够制作一个包含该范围内单元格中所有值的数组。现在我需要查看是否所有这些项目/元素都存在于:
Dim LowerFilmWidthArray
LowerFilmWidthArray = Application.Transpose(Evaluate("row(320:420)"))
所以我使用建议的功能:
Function arrElemInArray(arr As Variant, arrX As Variant) As Boolean
Dim i As Long, j As Long, boolFound As Boolean
For i = LBound(arrX) To UBound(arrX)
For j = LBound(arr) To UBound(arr)
If CStr(arr(j)) = CStr(arrX(i)) Then
boolFound = True: Exit For
End If
If Not boolFound Then arrElemInArray = False: Exit Function
Next j
Next i
arrElemInArray = True

Debug.Print (arrElemInArray)
End Function
并使用
If arrElemInArray(LowerFilmWidthArray, LowerFilmWidth) Then
msgbox("Great success!")
End If
该解决方案必须适用于整数和字符串。我仍然无法让它按预期工作。无论如何它通常都会返回“True”,但它似乎只检查较小数组中的第一项与大数组。
编辑中的此代码在“CStr(arrX(i))”上返回“下标超出范围”错误。
但是工作表中的值与图像中的值一样
enter image description here
完整的子程序如下所示:
Sub Testing()

Dim LastColumn As Long
LastColumn = Cells(Cells.Find("Parameters", lookat:=xlWhole).Row, Columns.Count).End(xlToLeft).Column

Dim LowerFilmWidth
LowerFilmWidth = ThisWorkbook.Worksheets("Machine Specification").Range(Cells(Cells.Find("Lower Film Width (mm)").Row, 3), Cells(Cells.Find("Lower Film Width (mm)").Row, LastColumn))

Dim LowerFilmWidthArray
LowerFilmWidthArray = Application.Transpose(Evaluate("row(320:420)"))

If arrElemInArray(LowerFilmWidthArray, LowerFilmWidth) Then
MsgBox ("Great success!")
End If

End Sub
工作簿:
enter link description here

最佳答案

请看下一个例子。这是你尝试完成的吗?

Sub testArrInArr()
Dim arr(), arr1(), arr2(), arr3(), arr4()
arr1 = Array(1, 2, 3): arr2 = Array(2, 3, 4)
arr3 = Array(3, 6, 5, 4): arr4 = Array(4, 5, 6)

arr = Array(arr1, arr2, arr3)
Debug.Print arrIsInArray(arr, arr2)
End Sub

Function arrIsInArray(arr As Variant, arrX As Variant) As Boolean
Dim i As Long, jArr As String
For i = LBound(arr) To UBound(arr)
If Join(arr(i)) = Join(arrX) Then arrIsInArray = True: Exit Function
Next i
End Function
已编辑 :
为了测试 每个数组元素 如果 存在于另一个数组中 ,请尝试下一个方法:
Sub tst2CheckArrElements()
Dim arr, arr1, arr2
arr = Split("1,2,3,4,5", ","): arr1 = Split("Sausage,Dog,Ship", ","): arr2 = Split("1,3,2", ",")

Debug.Print arrElemInArray(arr, arr1)
Debug.Print arrElemInArray(arr, arr2)
End Sub

Function arrElemInArray(arr As Variant, arrX As Variant) As Boolean
Dim i As Long, j As Long, boolFound As Boolean, mtch

If Not IsArray(arrX) Then
For j = LBound(arr) To UBound(arr)
If CStr(arr(j)) = CStr(arrX) Then arrElemInArray = True: Exit For
Next j
Exit Function
End If
For i = LBound(arrX) To UBound(arrX, 2)
For j = LBound(arr) To UBound(arr)
If CStr(arr(j)) = CStr(arrX(1, i)) Then
boolFound = True: Exit For
End If
Next j
If Not boolFound Then arrElemInArray = False: Exit Function
boolFound = False
Next i
arrElemInArray = True
End Function

关于arrays - VBA 在数组中搜索数组? (检查一个数组的所有项是否存在于另一个数组中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70835087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com