我一直试图通过自动付款来核对对银行帐户的付款。最初这很简单,一个简单的'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列的每一步?
提前致谢?
答案 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