我是使用宏的新手,我需要一些帮助。我正在解析具有大量行的科学数据集,因此我试图根据我需要的样本数据仅提取所需的行。我要搜索的值的确切数量也会在每个数据集之间发生变化。
目标: 能够将值输入到 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