Excel 查找包含特定值的行

Excel 查找包含特定值的行,excel,vba,Excel,Vba,我有一个Excel工作表,其中A列中的每个单元格都是按顺序排列的日期 A ---------- 1/01/2016 ... 12/31/2019 如何返回找到特定日期的位置的行号 大概是这样的: Private Sub btnSubmit_Click() today = Date row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, _ LookIn:

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

    A    
----------
1/01/2016
...
12/31/2019
如何返回找到特定日期的位置的行号

大概是这样的:

Private Sub btnSubmit_Click()

    today = Date

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

    MsgBox row_today

End Sub
Dim today As Date
Dim row_today As Long
row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values).Row
替换

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


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


声明变量 在要返回的代码中:

  • 今天
    作为日期和日期
  • 今天的行\u
    作为一个长整数
编辑:我以前建议将今天的行_声明为
integer
。如果行号大于32767,则会出现错误;因此,我修改了
long
,它可以轻松处理200多万行

但您目前正在返回:

  • 今天
    作为变体和
  • row\u今天
    作为变体
您可以这样声明它们:

Private Sub btnSubmit_Click()

    today = Date

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

    MsgBox row_today

End Sub
Dim today As Date
Dim row_today As Long
row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values).Row

使用。查找 在代码的这一行中:

row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values)
首先,您有一个输入错误-它应该是
LookIn:=xlValues
而不是
LookIn:=x1Values

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

要返回行号,只需在末尾添加
.row
,如下所示:

Private Sub btnSubmit_Click()

    today = Date

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

    MsgBox row_today

End Sub
Dim today As Date
Dim row_today As Long
row_today = ThisWorkbook.Sheets("Sheet1").Range("A:A").Find(What:=today, LookIn:=x1Values).Row

因此您的最终代码应该如下所示:

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

如果您找不到今天的日期,则接受的答案会给您一个错误:
.find
将返回
nothing
,添加的
.row
将在出现错误时停止代码

建议稍微更改代码以处理找不到任何内容:

Private Sub btnSubmit_Click()

Dim today As Date
Dim row_today As Long

today = Date

With ThisWorkbook.Sheets("Sheet1").Range("A:A")

    If .Find(What:=today, LookIn:=xlValues) is not Nothing then
        row_today = .Find(What:=today, LookIn:=xlValues).Row
    Else
        MsgBox "Today's date not found"
    End If

End With

End Sub

您使用的代码有什么问题?我收到一个运行时错误,“下标超出范围”,该错误来自
LookIn:=x1Values
。没有这样的参数。请尝试
xlValues
在您的其他答案中列出了其他良好做法。OP希望返回行号,而不是范围的值。非常好,谢谢!对于解决方案和引用,都非常感谢。这可能会返回行数>32767的错误,因为这是
整数
数据类型的限制。建议今天申报
row\u,只要
谢谢@RonRosenfeld我不知道限额这么小!我要修改我的答案。