excel - 将 Instr 与范围/列一起使用,而不是单个单元格/手动输入值
问题描述
我是使用宏的新手,我需要一些帮助。我正在解析具有大量行的科学数据集,因此我试图根据我需要的样本数据仅提取所需的行。我要搜索的值的确切数量也会在每个数据集之间发生变化。
目标: 能够将值输入到 Sheet3 的 A 列,然后使用宏检查这些值是否出现在 Sheet2 的指定列中,如果是,则将整行复制粘贴到 Sheet1,并在其末尾停止A 列。
问题: 使用 Instr,我可以使用 .cells 将 string2 设置为单个单元格,也可以手动设置值,但如果我尝试使用范围、列或单元格集,则代码不起作用。
Instr 是否允许您将 string2 设置为多个单元格...??
如果我使用“OR”,我可以设置多个单元格,但这最终会非常不雅,而且只有在代码中与预期的 string2 列上手动设置相同数量的值时,它也才有效;例如,如果您有 5 个要搜索的值,但代码中有 6 个以上的值,它将搜索空白并最终拉出不需要的不良行。
这是我当前遇到问题的测试代码部分:
Dim wb As Workbook: Set wb = ActiveWorkbook
Dim wsa As Worksheet
Set wsa = wb.Worksheets("Sheet2")
Dim wsb As Worksheet
Set wsb = wb.Worksheets("Sheet3")
a = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If InStr(wsa.Cells(i, 2), wsb.Cells(1, 1)) Or _
InStr(wsa.Cells(i, 2), wsb.Cells(2, 1)) Or _
InStr(wsa.Cells(i, 2), wsb.Cells(3, 1)) Or _
InStr(wsa.Cells(i, 2), wsb.Cells(4, 1)) Or _
InStr(wsa.Cells(i, 2), wsb.Cells(5, 1)) Or _
InStr(wsa.Cells(i, 2), wsb.Cells(6, 1)) then
wsa.Rows(i).Copy
Worksheets("Sheet1").Activate
b = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Sheet1").Cells(b + 1, 1).Select
ActiveSheet.Paste
wsa.Activate
End If
Next
只要我需要搜索相同数量的值,它就可以正常工作,但是如果我只输入 <6 个值,它最终会拉随机线 --- 有时我只需要搜索 1 个值,有时只需要搜索几十个,所以它不必手动编辑代码以匹配要作为 string2 搜索的输入值的数量会很好。
我尝试使用各种范围/列而不是 wsb.cells,但它不起作用。
If InStr(wsa.Cells(i, 2), wsb.Range("A:A")) Then
If InStr(wsa.Cells(i, 2), wsb.Columns(1)) Then
解决方案
推荐阅读
- android - 多个textView一起下移
- php - php在特定元素之后将数组拆分为两部分
- php - PHP - 替换字符并计算
- kotlin - 安全调用变量链中的最后一个属性
- xml - 我有 2 段 xquery 代码,其中 1 给出正确的结果,但 2 没有。为什么?
- laravel - 无法在 Laravel Carbon 中转换日期时间
- node.js - 尝试获取参数时出现 Firebase Cloud Function 错误
- browser - 浏览器后退按钮不适用于 gatsby.js 项目
- kubernetes - kubeadm init 在控制平面设置时失败`超时等待条件`
- java - 从具有最低键的优先级队列中删除节点