查找包含特定值的行

use*_*072 2 excel vba

我有一个 Excel 工作表,其中 A 列中的每个单元格都是按顺序排列的日期。

    A    
----------
1/01/2016
...
12/31/2019
Run Code Online (Sandbox Code Playgroud)

如何返回找到特定日期的行号?

像这样的东西:

Private Sub btnSubmit_Click()

    today = Date

    row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, _
        LookIn:=x1Values)

    MsgBox row_today

End Sub
Run Code Online (Sandbox Code Playgroud)

gir*_*ata 8

在子程序开始时声明变量是一种很好的做法,在这种情况下,它会帮助您找到错误。另一个问题是.Find当前正在返回一个范围,您希望在其中查看该范围的行号。我将在下面解释如何解决这两个问题:


声明变量

在您要返回的代码中:

  • today 作为约会和
  • row_today 作为长整数

编辑:我之前建议将 row_today 声明为integer. 如果行号大于 32,767,这将产生错误;所以我修改为long,可以轻松处理超过 200 万行

但您目前正在返回:

  • today 作为变体和
  • row_today 作为变体

您可以像这样声明它们:

Dim today As Date
Dim row_today As Long
Run Code Online (Sandbox Code Playgroud)

使用 .Find

在这行代码中:

row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values)
Run Code Online (Sandbox Code Playgroud)

首先,你有一个错字-它应该是LookIn:=xlValuesLookIn:=x1Values

其次,您要返回包含您要查找的日期的单元格范围。有关该.Find方法的更多信息,请在此处阅读MSDN 文档

要返回行号,您只需要.Row像这样在末尾添加:

row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values).Row
Run Code Online (Sandbox Code Playgroud)

所以你的最终代码应该是这样的:

Private Sub btnSubmit_Click()

Dim today As Date
Dim row_today As Long

today = Date
row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=xlValues).Row

Debug.Print row_today

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 这可能会返回行号 > 32,767 的错误,因为这是 `Integer` 数据类型的限制。建议将 `row_today 声明为 Long` (2认同)