Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何搜索包含特定日期的单元格?_Excel_Vba - Fatal编程技术网

Excel 如何搜索包含特定日期的单元格?

Excel 如何搜索包含特定日期的单元格?,excel,vba,Excel,Vba,正在尝试搜索特定日期的单元格位置 我在dd-mm-yy表单中有一系列日期,需要能够找到从下拉菜单中选择的日期的单元格位置。我使用的是一个标准的Range.Find函数,用于搜索非日期,但搜索日期时返回错误91:对象变量或未设置块变量 在运行该程序之前,我曾尝试通过excel中的format单元格和a=text函数将日期转换为文本格式,但仍然不起作用 我在某个地方读到关于将日期转换为与Excel使用的内部格式(mm/dd/yy)匹配的内容,但这并没有什么区别 'Date to be searche

正在尝试搜索特定日期的单元格位置

我在dd-mm-yy表单中有一系列日期,需要能够找到从下拉菜单中选择的日期的单元格位置。我使用的是一个标准的Range.Find函数,用于搜索非日期,但搜索日期时返回错误91:对象变量或未设置块变量

在运行该程序之前,我曾尝试通过excel中的format单元格和a=text函数将日期转换为文本格式,但仍然不起作用

我在某个地方读到关于将日期转换为与Excel使用的内部格式(mm/dd/yy)匹配的内容,但这并没有什么区别

'Date to be searched

Set SDate = Sheets("Data").Range("F1")

'find function

Set oRange = Sheets("Planning").Range("A1:A50").Find(What:=Sdate, lookat:=xlWhole)

'Return Address

MsgBox oRange.Address

我希望能够搜索一个单元格位置,并以A1形式或(1,1)形式给出一个单元格位置。两者都会起作用

.Find
与日期值相结合有点棘手,这是您自己发现的

试试下面的方法

Sub finddate()

'Date to be searched
Set SDate = Sheets("Data").Range("F1")

'find function
Set oRange = Sheets("Planning").Range("A1:A50").Find(What:=DateValue(Sdate), lookin:=xlFormulas)

'Return Address
MsgBox oRange.Address

End Sub
另一种方法是:

Sub findDate()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("The name of your Worksheet")
Dim dateToFind As Date
dateToFind = sht.Range("F1").Value
Dim cell As Range
For Each cell In sht.Range("datesRng").Cells 'I am using a named range which contains the dates but you can use A1:A50 instead
    If cell.Value = dateToFind Then
        MsgBox cell.Address
    End If
Next cell
End Sub

您已经合并了单元格,这就是为什么它返回
Nothing
,请尝试:

Sub finddate()

Set Sdate = Sheets("Data").Range("F1")
Set SearchRange = Sheets("Planning").Range("A1:A50")

If Not IsError(Application.Match(Sdate, SearchRange, 0)) Then
    Set oRange = Cells(Application.Match(Sdate, SearchRange, 0), 1)
    MsgBox oRange.Address
End If

End Sub

如果您的
F1
和查找范围都被格式化为日期,它应该可以正常工作。谢谢,我已经尝试过了,但是我的一些单元格被合并了,这导致它无法工作啊!VBA噩梦;)为了VBA,我投票反对合并单元格!如果合并的单元格仅垂直合并,则
Range.Find
也会在合并的单元格中查找。但如果它们是水平或二维合并的,则只有
SearchOrder:=xlByRows
在它们中找到,而
SearchOrder:=xlByColumns
没有。如果省略此参数,则最后使用的参数已就位。(这种行为似乎是一个bug)。感谢您的快速响应,我已经让它工作了@保格莱德会很高兴的!我已将
DateFormat
更改为
DateValue
。如果这对你有帮助,请不要忘记接受答案