2012-02-20 188 views
0

我正在使用下面的代码来查找列。VBA搜索标准

Set FinColumn = .Find(What:="Tax", AFter:=.Cells(1, 1), LookIn:=xlValues, LookAt _ 
      :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
      False, SearchFormat:=False). 

如果我有像下面的列,它应该确定。

Tax  Tax&Fee Tax&Fee1 

我怎样才能改变上面的设置语句找到所有上述columns.is有任何搜索条件,我可以实现。

感谢,

Chaitu

回答

2

虽然我的第一个答案是正确的,它是不完整的。以下代码循环查找每个包含“税”的单元格,并在全部处理完毕后停止。

直接回答你的问题是用xlPart代替xlWhole。但是,有些错误会阻止您的代码工作;例如,您没有定义查找操作的范围。我在.Find之前添加了.Cells

希望这会有所帮助。

Option Explicit 
Sub FindAllTax() 

    Dim ColCrnt As Long 
    Dim ColLast As Long 
    Dim FinColumn As Range 
    Dim RowCrnt As Long 
    Dim RowLast As Long 

    RowLast = 0 
    ColLast = 0 

    With Sheets("Sheet6") 

    Set FinColumn = .Cells.Find(What:="Tax", After:=.Cells(1, 1), _ 
      LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

    Do While True 
     If FinColumn Is Nothing Then 
     ' No occurrence of "Tax" found 
     Exit Do 
     End If 
     RowCrnt = FinColumn.Row 
     ColCrnt = FinColumn.Column 
     If RowCrnt < RowLast Or _ 
     (RowCrnt = RowLast And ColCrnt < ColLast) Then 
     ' Current cell is above last cell so have looped after finding 
     ' all values. 
     Exit Do 
     End If 
     Debug.Print "Cells(" & RowCrnt & ", " & ColCrnt & ")=" & _ 
              .Cells(RowCrnt, ColCrnt).Value 
     RowLast = RowCrnt 
     ColLast = ColCrnt 
     Set FinColumn = .Cells.FindNext(FinColumn) 
    Loop 
    End With 

    Debug.Print "All cells containing ""tax"" processed" 

End Sub 
+0

+1在第一去工作! :) – 2012-02-21 03:18:11

1

托尼已经给你一种方法。这是另一个使用通配符。现在,使用通配符,因为假设你有细胞是非常重要的,其中

A1 =含税

B10 =含税&费

C15 =含税& FEE1

D20 = 123Tax

G45 = DoggyTax

如果你只是想寻找税*即税单,缴税&手续费和税金&费用1?

而且当你正在做的所有细胞中的搜索,那么你必须指定范围。这里是快速示例

Option Explicit 

Sub Sample() 
    Dim oRange As Range, aCell As Range, bCell As Range 
    Dim ws As Worksheet 
    Dim ExitLoop As Boolean 
    Dim SearchString As String, FoundAt As String 

    On Error GoTo Err 

    '~~> The Sheet where the search has to be performed 
    Set ws = Worksheets("Sheet1") 
    '~~> In All cells 
    Set oRange = ws.Cells 

    '~~> Search string 
    SearchString = "Tax*" 

    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 

    '~~> If search was found 
    If Not aCell Is Nothing Then 
     Set bCell = aCell 
     FoundAt = aCell.Address 
     Do While ExitLoop = False 
      Set aCell = oRange.FindNext(After:=aCell) 

      If Not aCell Is Nothing Then 
       If aCell.Address = bCell.Address Then Exit Do 
       FoundAt = FoundAt & ", " & aCell.Address 
      Else 
       ExitLoop = True 
      End If 
     Loop 
    Else 
     MsgBox SearchString & " not Found" 
    End If 

    MsgBox "The Search String has been found these locations: " & FoundAt 
    Exit Sub 
Err: 
    MsgBox Err.Description 
End Sub 

您可以在下面提到的链接中找到更多关于FIND()和FINDNEXT()的信息。

话题:.Find和.FindNext在Excel VBA

LINKhttp://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/

注意:如果你想找到的 “税” 的所有实例,那么你不需要通配符。所有你需要做的就是按照Tony的建议使用下面的内容。

LookAt:=xlPart 

HTH

希德