Tin*_*ing 5 excel vba excel-vba
我有问题使match()在excel VBA中工作.代码是:
x = Application.Match("Sep 2008", Range("F1:F1"), 0)
Run Code Online (Sandbox Code Playgroud)
单元格F1中的值是9/1/2008.
即使我将2008年9月更改为2008年9月9日,它仍然没有返回任何值.
知道怎么解决吗?
use*_*261 13
之所以 Even if I changed Sep 2008 to 9/1/2008, it still doesn't return any value.
是因为当excel中有一个Date时,Excel会自动将该日期转换为数值,您真正想要搜索的是:
39692
此数字是9/1/2008默认值为1/1/1900 之间的天数
excel中的每个日期都存储有这样的值.因此,处理此问题的最简单方法是将您看到的日期转换为Excel使用的日期CDate().
这本身就会给你一个无用的错误,即vba无法获得该属性.
这是因为Lookup_value可以是值(数字,文本或逻辑值)或对数字,文本或逻辑值的单元格引用.不是日期,所以只需将now date值转换为数字,即可使用列表搜索匹配的数字CLng()
给它一个镜头它也会比使用Find替代方法快得多:
x = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F1"), 0)
Run Code Online (Sandbox Code Playgroud)
这应该给你预期的结果
要在没有找到匹配项时进行处理,请尝试以下
Sub MatchDate()
Dim myvalue As Double
Dim LastRow As Long
LastRow = Cells(Rows.Count, "F").End(xlUp)
On Error GoTo NotFound
myvalue = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F" & LastRow), 0)
MsgBox (myvalue)
End
NotFound:
MsgBox ("No Match Was Found")
End
End:
End Sub
Run Code Online (Sandbox Code Playgroud)
你最好的选择是使用.Find().这将返回range如果找到或nothing如果没有.
Set x = Range("F1:F1").Find(CDate("Sept 2008"), , , xlWhole)
Run Code Online (Sandbox Code Playgroud)
如果您想要列号:
x = Range("F1:F1").Find(CDate("Sept 2008"), , , xlWhole).Column
Run Code Online (Sandbox Code Playgroud)
捕获未找到
Sub test()
Dim y As Date, x As Variant, c As Long
y = CDate("Sep 2008")
Set x = Range("1:1").Find(y, , , xlWhole)
If Not x Is Nothing Then
c = x.Column '<~~found
Else
Exit Sub 'not found
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24813 次 |
| 最近记录: |