在Excel中,您可以使用=CONVERT(A1,"in","ft")
(其中A1
包含要转换的数字)将英寸转换为英尺,或使用=CONVERT(A1,"byte","bit)
将字节转换为位。此CONVERT
函数适用于excel的预定义单位。
有没有办法定义自定义单位,例如“piece”或“dozen”或“tub”?我一直在用excel的"bit"
单位代替“piece”。我想进行=CONVERT(3,"dozen","piece")
等转换(评估结果应为36)。
当然,可以维护一个自定义单位表以及它们转换成标准单位(例如1件= 1位,1打= 12位)。然后可以使用修改后的转换函数=MYCONVERT(3,"dozen","piece")
来处理转换,该函数将从表中查找自定义单位。但有没有一种优雅的方法可以使原始的CONVERT
函数工作,只需添加到Excel的预定义单位列表中就可以避免变通方法?
答案 0 :(得分: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")