我的工作表看起来像:
read2()
我的Userform包含文本框,其中可以填写姓名,姓氏等。
我正在寻找类似的东西:
read2()
这不容易解释,但我希望你明白这一点。
我知道如何在一个列中进行搜索,但这也可以在两个列中进行搜索吗?
答案 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
请注意,行号基于范围,并且由于未包含标题行,因此显示第2行而不是实际第3行。您可以考虑到这一点,或者只包含标题行(如果它实际位于第1行)。 / p>