2016-12-30 51 views
1

在Excel中,可以使用=CONVERT(A1,"in","ft")(其中A1包含要转换的数字)将英寸转换为英尺,或将字节转换为=CONVERT(A1,"byte","bit)的位。这个CONVERT函数与Excel的预定义单位一起使用。Excel:可以为CONVERT功能定义自定义单位吗?

有没有办法定义自定义单位,比如“piece”或“dozen”或“tub”?我一直在用excel的"bit"单元代替“piece”。我想要进行转换,例如=CONVERT(3,"dozen","piece")(评估结果应为36)。当然,人们可以维护一个定制单元的表格,并将它们的转换成标准单元(例如1个单元= 1个比特,1个比特= 12个比特)。然后可以使用经修改的转换函数=MYCONVERT(3,"dozen","piece")来处理转换,该转换函数将从表中查找自定义单位。但是,有没有一种优雅的方法可以使原始CONVERT函数正常工作,通过简单地添加到Excel的预定义单元列表来避免变通方法?

回答

1

警告:这并不回答您的确切问题,但它确实试图提供潜在的解决方案

我不知道有什么办法可以完全按照你的要求去做......但也许有一个妥协解决方案,你可以使用UDF并让UDF首先调用工作表函数。如果有效,则返回结果。否则,请进入您的自定义功能。这意味着你必须用MYCONVERT替换CONVERT的所有实例,从我的有限制的角度来看,这似乎是一个合理的取舍。

这是一个这可能看起来如何的快速示例。

自定义转换样板:

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")