VBA在Excel中搜索特定列

时间:2017-11-09 04:22:13

标签: excel vba excel-vba

我正在尝试使用下面的VBA代码搜索Excel(列K)中的特定列,但是当我运行宏时,它会搜索整个工作表而不是指定的列。

问题是它首先在早期的列中找到'mycell1',即在C列而不是列K中,我不希望它这样做。

我也试过在'Searchorder'中使用'xlByRows',它有同样的问题。

非常感谢任何帮助

由于

Range("K:K").Select
Set foundcell1a = Selection.Cells.Find(What:=mycell1, After:=ActiveCell, LookIn:=xlValues, LookAt _
    :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False)
Set foundcell1a = Cells.FindNext
If Not foundcell1a Is Nothing Then
foundcell1a.Activate
End If

2 个答案:

答案 0 :(得分:2)

如果您可以避免使用.Select,请不要使用With...End With,大部分时间都可以使用Sub SearchK() Dim mycell1 Dim foundcell1a As Range mycell1 = 1 With ActiveWorkbook.Worksheets("Sheet1").Range("K:K") Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1)) Set foundcell1a = .FindNext(foundcell1a) If Not foundcell1a Is Nothing Then foundcell1a.Activate End If End With End Sub

请尝试使用With...End With构造。与您想要操作的对象一样具体。

 Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1))

如果没有Set foundcell1a = ActiveWorkbook.Worksheets("Sheet1").Range("K:K").Find(mycell1, .Cells(.Rows.Count, 1)) ,则必须重复所有对象标识符:

ActiveWorkbook.Worksheets("Sheet1").Range("K:K")

必须表达为:

Set foundcell1a = .Find(mycell1, .Cells(.Rows.Count, 1))

当VBA评估命令时,它需要在每次遇到它时评估句点(。)之前的每个属性。使用mycell1可以删除4个句点,因此它也可以更快地运行。

object在K列中最后一次使用的单元格后面找string,因此无论活动单元格如何,它都会循环返回以查找K列中的第一个实例。

答案 1 :(得分:1)

试试这个:

With Range("K:K")
    Set LastCell = .Cells(.Cells.Count)
End With

Set FoundCell1a = Range("K:K").Find(mycell1, LastCell)
If Not FoundCell1a Is Nothing Then
    FirstAddr = FoundCell1a.Address
    Range(FirstAddr).Activate
End If

希望这有帮助!