VBA行位置

VBA行位置,vba,excel,Vba,Excel,我目前正在处理由其他人编译的Excel工作表(因此我无法删除或添加列)。我正在使用VBA为工作表用户创建一个界面。在其中一个选项卡中,有三列我希望能够找到给定两个参数的行,这两个参数将在前面的两列中找到,以便我可以输入一个数字。作为参考,我使用下拉选项供用户选择前两个参数,并在输入框中输入第三个参数。需要找到两个输入匹配的位置,并能够在不同的列中指定相同的行 例如(查找pear green的行)[答案是第9行,在第9行中输入输入] Fruit Color Amount Apple

我目前正在处理由其他人编译的Excel工作表(因此我无法删除或添加列)。我正在使用VBA为工作表用户创建一个界面。在其中一个选项卡中,有三列我希望能够找到给定两个参数的行,这两个参数将在前面的两列中找到,以便我可以输入一个数字。作为参考,我使用下拉选项供用户选择前两个参数,并在输入框中输入第三个参数。需要找到两个输入匹配的位置,并能够在不同的列中指定相同的行

例如(查找pear green的行)[答案是第9行,在第9行中输入输入]

Fruit     Color    Amount
Apple     Red
Apple     Green
Apple     Blue
Orange    Red
Orange    Green
Orange    Blue
Pear      Red
Pear      Green
Pear      Blue

这是一个起点:

Function FindOccurence(Fruit As String, Color As String) As Long
Dim WS As Worksheet
Set WS = ActiveSheet
Dim L As Long
L = WS.Cells(WS.Rows.Count, 1).End(xlUp).Row
For Each Cell In WS.Range("A2:A" & L)
If Cell.Value = Fruit And Cell.Offset(0, 1).Value = Color Then
FindOccurence = Replace(Cell.Address(0, 0), "A", "")
Exit Function
End If
FindOccurence = 0
Next Cell
End Function

Sub Main()
Debug.Print (FindOccurence("Apple", "Green"))
End Sub


请注意,这会让您找到第一次出现的

还有另一种方法。这是一个起点,可以进行调整以查找工作表中的所有引用。这将使用
.findnext
属性

Sub FindValue()
    Dim ws As Worksheet
    Dim NoRow As Integer
    Dim rng As Range
    Dim firstaddress As String
    Dim c

    Set ws = ThisWorkbook.Sheets("Fruit") ' Change to your sheet name

    With ws
        NoRow = .Range("A" & .Rows.Count).End(xlUp).Row
        Set rng = .Range("A2:A" & NoRow)
        With rng
            Set c = .Find("Pear", LookIn:=xlValues) ' Change Pear to your test value
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    If c.Offset(0, 1) = "Green" Then ' Change this to the second cell value
                        MsgBox c.Address
                    End If                        
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
    End With
End Sub
子FindValue()
将ws设置为工作表
Dim NoRow作为整数
变暗rng As范围
将第一个地址设置为字符串
dimc
将ws=ThisWorkbook.Sheets(“水果”)更改为工作表名称
与ws
NoRow=.Range(“A”&.Rows.Count).End(xlUp).Row
设置rng=.Range(“A2:A”和NoRow)
带rng
设置c=.Find(“Pear”,LookIn:=xlValues)”将Pear更改为您的测试值
如果不是,那么c什么都不是
firstAddress=c.地址
做
如果c.Offset(0,1)=“绿色”,则“将其更改为第二个单元格值”
MsgBox c.地址
如果结束
集合c=.FindNext(c)
循环而不是c为Nothing,c.Address为firstAddress
如果结束
以
以
端接头

这应该比使用for循环更快

此方法非常有效。比如说有一个单独的方法,这样未来的编辑器可以更容易地更新代码。谢谢