Excel:可以为CONVERTfunction定义自定义单位吗?
在Excel中,可以使用=CONVERT(A1,"in","ft")
(其中A1
包含要转换的数字=CONVERT(A1,"in","ft")
将英制转换为英制,或将字节转换为=CONVERT(A1,"byte","bit)
。这个CONVERT
函数和excel的预定义单位一起工作。
有没有一种方法来定义自定义单位,如“片”或“打”或“浴缸”? 我一直在使用Excel的"bit"
单位来代替“片”。 我想要做转换,如=CONVERT(3,"dozen","piece")
(评估结果应该是36)。
当然,可以维护一个自定义单元的表格,并把它们转换成标准单元(例如1个单元= 1个比特,1个比特= 12个比特)。 然后可以使用修改后的转换函数来处理转换=MYCONVERT(3,"dozen","piece")
,它将从表中查找自定义单位。 但有没有一种优雅的方式来使原始CONVERT
function工作,通过简单地添加到Excel的预定义单位列表避免变通方法?
警告:这不能回答你确切的问题,但它确实寻求提供一个潜在的解决scheme 。
我不知道有什么办法可以准确地完成你的要求……但也许有一个妥协的解决scheme,你可以使用UDF并让UDF首先调用工作表函数。 如果有效,则返回结果。 否则,进入你的自定义function。 这只是意味着你必须用MYCONVERTreplaceCONVERT的所有实例,而从我的有限制的angular度来看,这似乎是一个合理的取舍。
这是一个如何看起来很快的样本。
自定义转换样板:
Private Function Factor(Unit As String) As Double Select Case LCase(Unit) Case "dozen" Factor = 12 Case "dz" Factor = 12 Case "unit" Factor = 1 Case "piece" Factor = 1 Case "each" Factor = 1 Case "ea" Factor = 1 Case "gross" Factor = 144 Case Else Factor = 0 End Select End Function
而你的UDF:
Function MYCONVERT(Val As Double, FromUnit As String, ToUnit As String) As Variant On Error GoTo CUSTOM MYCONVERT = WorksheetFunction.CONVERT(Val, FromUnit, ToUnit) Exit Function CUSTOM: Dim fromFactor, toFactor As Double fromFactor = Factor(FromUnit) toFactor = Factor(ToUnit) If fromFactor = 0 Or toFactor = 0 Then MYCONVERT = CVErr(xlErrNA) Exit Function End If MYCONVERT = Val * (fromFactor / toFactor) End Function
现在,这些应该工作:
=MYCONVERT(A1,"in","ft") =MYCONVERT(3,"dozen","piece")