Excel 查找包含特定值的行
我有一个Excel工作表,其中A列中的每个单元格都是按顺序排列的日期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:
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我不知道限额这么小!我要修改我的答案。