Excel marco vba - 检查1和/或2单元格的值

时间:2017-02-01 03:18:44

标签: vba excel-vba excel

我是Excel VBA宏的新手,但我的任务是创建一个项目,让用户将值输入到表2中的单元格,搜索数据(表1)并将过滤后的数据复制粘贴到工作表2中。

假设A和B是值输入。我试过了

    For Row = 2 To finalrow
        If Cells(i, 1).value = a And Cells(i, 2).value = b Then
            Range(Cells(i, 1), Cells(i, 7)).Copy
            Sheet2.Select
            Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
            Sheet1.Select
        ElseIf Cells(i, 1).Value = A Or Cells(i, 2).Value = B Then
            Execute
        End If
    Next Row
    Sheet2.Select
    Range("B1").Select
    Range("B3").Select

如果用户输入1值,则结果正确。但是如果用户同时输入A和B,它应该返回包含2个值的那些行,而是返回给我一个结果和B结果。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

假设用户在a单元格bSheet2中输入值A1和/或B1。基本上,如果没有输入,你想要的是忽略它们中的任何一个。试试这个:

Sub mysub()
    Dim i As Long, finalRow As Long, destRow As Long, a, b
    destRow = 2
    a = Sheet2.Range("A1").value ' <-- adjust to the place where user enters a
    b = Sheet2.Range("B1").value ' <-- and b
    With Sheet1
        finalRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To finalRow
            If (IsEmpty(a) Or .Cells(i, 1).value = a) And _
               (IsEmpty(b) Or .Cells(i, 2).value = b) Then
                .Cells(i, 1).Resize(1, 7).Copy
                Sheet2.Cells(destRow, 1).PasteSpecial xlPasteFormulasAndNumberFormats
                destRow = destRow + 1
            End If
        Next
    End With
End Sub