我有这张表,我应该得到"适用性"类别" 3"的每个要素知道仅其ID。
示例:findAppl(0709_2014)="是"
这是我的代码:
Function findAppl(id As Range)
Set t1 = Sheets("Sheet1").Range("Table1")
Set ids = Sheets("Sheet1").Range("ids")
Set id = ids.find(id.value, LookIn:=xlValues)
If Not IsEmpty(table.Rows(id.Row - 1).value) Then
findAppl = t1.Rows(id.Row - 1).value
End if
End Function
问题是find函数总是返回给定id的第一个范围,它对应于category = 2的范围。要解决这个问题,我在查找功能之后设置了一个if条件,但代码不再有效,我还使用了选项' After:='但它似乎没有正常工作
P.S。适用性不取决于类别 对于每个id,我们可以有一个或两个类别
答案 0 :(得分:0)
这是用于循环的代码。如果行数不多,你可以使用它......
Sub Test()
lrow = Sheets("Sheet1").Range("A65536").End(xlUp)
For cel = 1 To lrow
If Cells(cel, 3) = "yes" And Cells(cel, 2) = 3 Then
MsgBox Cells(cel, 1)
End If
Next
End Sub
答案 1 :(得分:0)
请找到使用find函数的简单循环,而不是遍历所有单元格...希望这对你有用...
Sub test()
With Worksheets(1).Range("B1:B500")
Set c = .Find(2, LookIn:=xlValues) 'give the category value here ex:2
If Not c Is Nothing Then
If Range(c.Address).Offset(0, 1).Value = "yes" Then
firstAddress = c.Address
Do
MsgBox Range(c.Address).Offset(0, -1)
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While Not c Is Nothing And (c.Address <> firstAddress)
End If
End If
End With
End Sub
答案 2 :(得分:0)
我不明白你的意思&#34;得到&#34;。但是你当然可以使用自动过滤器来返回你想要的值。以下代码使用您的数据将结果放在您的表旁边。您可以将它放在另一个工作表,另一个位置,VBA数组或任何地方:显然,您需要输入例程才能找到您的ID和类别。
Option Explicit
Sub FindApp()
Dim WS As Worksheet
Const Category As Long = 2
Const ID As String = "0709_2014"
Dim rTable As Range
Set WS = ActiveSheet
Set rTable = Range("Table1")
rTable.AutoFilter field:=1, Criteria1:=ID
rTable.AutoFilter 2, Category
Range("g1:I1").EntireColumn.Clear
rTable.Rows(0).Copy Range("g1")
rTable.SpecialCells(xlCellTypeVisible).Copy Range("g2")
rTable.AutoFilter 'Turn off autofilter
End Sub