Excel:可以为CONVERT函数定义自定义单位吗?

时间:2016-12-30 15:41:13

标签: excel excel-formula

在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的预定义单位列表中就可以避免变通方法?

1 个答案:

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