VBA:识别参数x,y和z为真的行

时间:2017-01-03 18:32:09

标签: vba excel-vba excel

我的工作表看起来像:

read2()

我的Userform包含文本框,其中可以填写姓名,姓氏等。

我正在寻找类似的东西:

read2()

这不容易解释,但我希望你明白这一点。

我知道如何在一个列中进行搜索,但这也可以在两个列中进行搜索吗?

2 个答案:

答案 0 :(得分:2)

使用for循环向下移动工作表并检查每个单元格是否有所需的值,例如:

Dim lastRow as long
Dim sName, surname, weight as string

sName = MyForm.MyControl.text ' etc etc - pick up the other form controls and put them to variables too

lastRow = Range("A1000000").End(xlUp).Row

For x = 2 to lastRow

     If cells(x, 1) = sName And cells(x,2) = surname And cells(x,3) = weight Then
         ' you've found a match
     End if

Next x

这使用Range类的Cells propery,语法是Cells(行,列),因此单元格A1 = Cells(1,1),单元格C10 = Cells(10,3)等等。 for循环在每次迭代时递增X,从而移动到下一行。

答案 1 :(得分:2)

正如@Absint所发布的那样,For循环完全可以接受+1。如果您有很多行并且发现循环速度很慢,您可以考虑使用Match函数来评估多个条件。

Sub findMatchedRow()
    Dim matchedRow, wks, Criteria1, Criteria2

    Set wks = Worksheets("Sheet1")

    Criteria1 = wks.Cells(2, 7).Address(False, False)
    Criteria2 = wks.Cells(3, 7).Address(False, False)

    matchedRow = wks.Evaluate("MATCH(" & Criteria1 & "&" & Criteria2 & ",A2:A5&B2:B5,0)")

    If Not IsError(matchedRow) Then
        wks.Range("G6") = matchedRow
    Else
        wks.Range("G6") = "Not Found"
    End If
End Sub

enter image description here

请注意,行号基于范围,并且由于未包含标题行,因此显示第2行而不是实际第3行。您可以考虑到这一点,或者只包含标题行(如果它实际位于第1行)。 / p>