VBA调用Excel WorksheetFunction时数据类型变更问题及抑制方法
Excel VBA调用部分Excel函数的数据类型变更特性
本文旨在分享Excel的一个未公开产品特性,以备后续参考。
从VBA调用部分Excel函数时,会出现意外的数据类型变更行为:
Sub test1() Dim ou, tu, soa, j&: ReDim ou(1 To 2, 1 To 2), soa(1 To 2, 1 To 1) For j = 1 To 2 ou(j, 1) = j: ou(j, 2) = Now(): soa(j, 1) = j Next With Application Debug.Print "Expected:", TypeName(ou(1, 1)), TypeName(ou(1, 2)) tu = .Sort(ou, 2) Debug.Print "Sort:", TypeName(tu(1, 1)), TypeName(tu(1, 2)) tu = .XLookup(1, soa, ou) Debug.Print "Xlookup:", TypeName(tu(1)), TypeName(tu(2)) tu = .VLookup(1, ou, 2, False) Debug.Print "Vlookup:", , TypeName(tu) End With End Sub
运行输出:
Expected: Long Date
Sort: Double String
Xlookup: Double String
Vlookup: String
可见,这些函数会将Long类型转为Double,Date类型转为String,使用时请留意此情况!
若将该行为视为产品特性,如何抑制其数据类型变更的影响?
更新
- 存在该特性的额外函数包括:IfError、IfNa、Lookup、HLookup、Filter、Choose
- 似乎所有预期返回参数原值的函数都存在此特性
内容的提问来源于stack exchange,提问作者rotabor
相关产品推荐
相关产品推荐

