2016-12-30 8 views
1

Excelでは、インチを=CONVERT(A1,"in","ft")A1には変換する数値が含まれています)または=CONVERT(A1,"byte","bit)のビット数でフィートに変換できます。このCONVERT機能は、Excelの定義済みユニットで機能します。Excel:カスタム単位をCONVERT関数に定義できますか?

"piece"や "dozen"や "tub"などのカスタムユニットを定義する方法はありますか?私は "作品"の代わりにExcelの"bit"ユニットを使っています。私は=CONVERT(3,"dozen","piece")のような変換をしたいと思います(評価の結果は36でなければなりません)。

もちろん、カスタム単位の表を標準単位(たとえば1ピース= 1ビット、1ダース= 12ビット)に変換して保持することもできます。変換はテーブルからカスタムユニットを検索する変更された変換関数=MYCONVERT(3,"dozen","piece")を使用して行われます。しかし、オリジナルのCONVERTを機能させるためのエレガントな方法はありますか?Excelの定義済みユニットのリストに単純に追加することで回避策を回避できますか?

答えて

1

警告:これはあなたの正確な質問には答えませんが、の解決策を提供するよう努めています。

質問する内容を正確に行う方法はわかりませんが、UDFを使用してUDFを使用して最初にワークシート関数を呼び出すことができる妥協点があります。それが機能する場合は、結果を返します。それ以外の場合は、カスタム関数に入ります。これは、CONVERTのすべてのインスタンスをMYCONVERTで置き換える必要があることを意味します。私の限られた立地からは、これは妥当なトレードオフのようです。

これはどのように見えるかの簡単なサンプルです。

カスタム変換定型:

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") 
関連する問題