excel - 如何匹配二维数组的第一列
问题描述
有没有办法在这个匹配查找中引用数组 kw30array 的第一列?我读到,如果您将行设置为 0,那么它将仅引用该列,但在尝试此操作后它不起作用。IE。kw30array(0,1) 作为范围。
另外,由于我使用的是数组而不是工作表,因此是否有必要说明“工作表函数”?
谢谢
For i = 2 To kw90rowcount
j = Application.WorksheetFunction.Match(kw90array(i, 1), kw30array, 0)
If IsError(j) Then
kw90array(i, 32) = "-"
kw90array(i, 33) = "-"
kw90array(i, 34) = "-"
kw90array(i, 37) = "-"
kw90array(i, 38) = "-"
Else:
kw90array(i, 32) = kw30array(j, 10)
kw90array(i, 33) = kw30array(j, 12)
kw90array(i, 34) = kw30array(j, 14)
kw90array(i, 37) = kw30array(j, 11)
kw90array(i, 38) = kw30array(j, 17)
End If
Next i
解决方案
Application.Match
范围更快
- 您必须使用
Application.Match
才能使用IsError
orIsNumeric
。 - 如果
Application.WorksheetFunction.Match
“未找到匹配项”,则会发生运行时错误。处理这个比较复杂,所以我永远放弃了它。 - 这是处理您的问题的一种方法:
Dim kw30first As Variant: kw30first = Application.Index(kw30array, 0, 1)
Dim rIndex As Variant
Dim i As Long
For i = 2 To kw90rowcount
rIndex = Application.Match(kw90array(i, 1), kw30first, 0)
If IsNumeric(rIndex) Then
kw90array(i, 32) = kw30array(rIndex, 10)
kw90array(i, 33) = kw30array(rIndex, 12)
kw90array(i, 34) = kw30array(rIndex, 14)
kw90array(i, 37) = kw30array(rIndex, 11)
kw90array(i, 38) = kw30array(rIndex, 17)
Else
kw90array(i, 32) = "-"
kw90array(i, 33) = "-"
kw90array(i, 34) = "-"
kw90array(i, 37) = "-"
kw90array(i, 38) = "-"
End If
Next i
- 几天前,我从 Tim Williams 那里了解到,阵列
Application.Match
上的速度比范围上的慢 10 倍。在我证明之后不久。所以你应该考虑做这样的事情:
Dim fcrg As Range: Set fcrg = kw30rng.Columns(1) ' First Column Range
'''
rIndex = Application.Match(kw90array(i, 1), fcrg, 0)
但是,仍然kw30array
在If
语句中使用数组。
推荐阅读
- javascript - 将 req.files 从服务器发送到服务器
- java - 带有 OAuth2 的 Spring WebClient 不存储访问令牌
- python-3.x - 人脸检测在android studio中不起作用
- ruby-on-rails - 如何将 find_by 应用于数组数组的元素 - Rails
- java - 打开 API UI 3.0.0 在底部隐藏架构,而不从 API 端点文档中删除它们
- stata - 输出比结果窗口可以记住的更广泛,因此日志捕获忘记记录
- firebase-cloud-messaging - 配置有一个 Firebase 项目的服务器可以向不同项目中应用的单个用户发送通知吗?
- c++ - 在 C++ 中读取非文本文件
- python - 将字典列表转换为 DataFrame 时出现 TypeError
- r - 将一列中以冒号分隔的字符串拆分为 R 中的不同列