gpt4 book ai didi

arrays - 比较取自工作表范围的 2 个数组时出现 Application.Match 错误

转载 作者:行者123 更新时间:2023-12-04 22:11:10 25 4
gpt4 key购买 nike

• 代码应该做什么:它应该将工作表中的 2 个范围作为数组,并使用 Application.Match 显示值匹配在 Range #1 中的行号。在这种情况下,它应该显示 10 和 12。

Sub RenglonesdeMatch()
Dim i As Integer, z, v3 As Variant
Dim Piso As Variant
Dim RowNum As Integer
With Sheets("Hoja1")


Piso = .Range("D10:D13").Value 'RANGE #1
v3 = .Range("H3:H6").Value

For i = 1 To UBound(Piso, 1)

z = Application.Match(v3, Piso, 0)
If Not IsError(z) Then

RowNum = Cells((i + 9), 4).Row

Debug.Print RowNum
End If
Next i
End With
End Sub
这是我的工作表数据:
H3:H6
玛丽亚
阿德里安娜

莉莲娜
D10:D13

FER
玛丽亚
吉梅纳
问题:它显示整个 Range (10, 11, 12, 13) 的所有行,即使没有匹配项。另外,我不确定这条线是否正确......
z = Application.Match(v3, Piso, 0)
我尝试将其更改为此,但代码显示错误 9。
 z = Application.Match(v3(i), Piso, 0)
注意:两个数组总是有不同的大小,但在这种情况下,我使用相同的大小。
我会很感激任何帮助。先感谢您!

最佳答案

Application.Match能够比较两个数组,返回匹配元素位置的数组。错误(仅)对于不匹配的情况(元素)......例如,在你的情况下:

  z = Application.Match(v3, Piso, 0)
将返回一个数组: 3, Error 2042, 1, Error 2042为了使其可见,您可以尝试:
  z = Application.IfError(Application.match(V3, Piso, 0), "x")
Debug.Print Join(Application.Transpose(z), "|")
'it will show: 3|x|1|x
所以, isError不返回 true并且在所有迭代案例中 匹配的行返回相同的 ...
现在,我想你不想返回匹配的位置,即使你没有回答 mai 澄清问题......
因此,很可能,您将需要以下内容:
 For i = 1 To UBound(Piso)
z = Application.match(V3(i, 1), Piso, 0)
If Not IsError(z) Then
RowNum = i + 9: Debug.Print RowNum
End If
Next i
但这是有争议的,取决于你真正尝试完成的事情,轮到你澄清这方面了......

关于arrays - 比较取自工作表范围的 2 个数组时出现 Application.Match 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72819285/

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