2

我是使用宏的新手,我需要一些帮助。我正在解析具有大量行的科学数据集,因此我试图根据我需要的样本数据仅提取所需的行。我要搜索的值的确切数量也会在每个数据集之间发生变化。

目标: 能够将值输入到 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
4

0 回答 0