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") ,它将从表中查找自定义单位。 但有没有一种优雅的方式来使原始CONVERTfunction工作,通过简单地添加到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")