使用True / False的Excel VBA搜索宏

时间:2014-05-29 02:28:54

标签: excel vba excel-vba

我一直试图通过自动付款来核对对银行帐户的付款。最初这很简单,一个简单的'cntrl + f'可以让我找到我需要的一切。然而,随着名单的增长,这已经变得非常耗时。我已经运行了一个宏来做我通常做的事情,结果如下:

    Sub Findname()
'
' Findname Macro
'
'
    Sheets("9 Month AP").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "BUTLAND"
    Sheets("Bank Statements").Select
    Cells.Find(What:="BUTLAND", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Range("B136").Select
    ActiveCell.FormulaR1C1 = "47.45"
    Sheets("9 Month AP").Select
    Range("C1").Select
    ActiveSheet.Paste
End Sub

在这个例子中,我想要的是从A1中获取信息:“9月AP”。在这种情况下,它是人名“BUTLAND”,在工作表“银行对帐单”中找到数据(名称)并获取B中的信息(他们支付的金额为47.45美元)列(在此示例中为B136)并将其粘贴到工作表中“9月Ap”。 我的问题是双重的。我认为这个宏根本不高效,这是写它的最好方法吗?其次,我怎样才能将它循环下去,以便它可以逐步下降,即;在这个例子中它采取了A1,下一步是A2,A3等等?在粘贴到C列的每一步?

提前致谢?

1 个答案:

答案 0 :(得分:0)

正如大卫·泽门斯所说,它非常直接地遍历范围:

    Sub test()

    DoSomethingByCellValue "BUTLAND", "47.5", Range("A1:A200")

    End Sub


    Sub DoSomethingByCellValue(ByVal searchVal As Variant, ByVal insertVal As Variant, _
ByRef xlrange As Excel.Range)

    'allocate for a range for use in the loop
    Dim xlcell As Excel.Range

    'loop through each cell in the range
    For Each xlcell In xlrange
        'if it equals the search term
        If xlcell.Value = searchVal Then
            'do something... e.g.
            xlcell.Offset(0, 1).Value = insertVal
            'or xlcell.Offset(0, 1).Value = xlcell.Offset(0, 1).Value + insertVal
        End If
    Next xlcell

End Sub

如果要使用内置搜索功能,则需要返回iterable或使用.FindNext功能。以下代码取自here,可能对您有用。

With Worksheets(1).Range("a1:a500") 
    Set c = .Find(2, lookin:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
            c.Value = 5 
            Set c = .FindNext(c) 
        Loop While Not c Is Nothing And c.Address <> firstAddress 
    End If 
End With