VBA自定义HASH42函数工作表调用返回#VALUE!错误求助
解决VBA自定义HASH函数工作表调用返回#VALUE!的问题
核心问题在于VBA的Log函数与Excel工作表的LOG函数逻辑不一致:
- Excel工作表的
LOG(number, base)支持指定底数计算对数 - VBA原生的
Log函数仅计算自然对数(底数为e),不接受双参数
你的原代码中直接使用了Excel工作表函数的写法LOG(value/10,2),在VBA环境中运行时会因参数不匹配触发错误,导致工作表调用返回#VALUE!。而调试TestHash时可能误调用了Excel工作表函数(如Application.Log),所以能得到正确结果。
修正后的VBA函数代码
Function HASH42(ByVal value As Double) As Integer Dim calcResult As Double ' VBA中计算以2为底的对数:log₂(x) = ln(x) / ln(2) calcResult = Round((Log(value / 10) / Log(2)) * 13, 0) HASH42 = CInt(calcResult) End Function
验证测试
在工作表中输入=HASH42(1600),计算过程为:
1600/10 = 16log₂(16) = 4(通过Log(16)/Log(2)计算)4*13 = 52Round(52,0) = 52
最终返回结果52,无错误。
内容的提问来源于stack exchange,提问作者Daiajo Tibdixious
相关产品推荐
相关产品推荐

