2016-12-30 56 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")