2016-12-30 5 views
1

In Excel können Sie Zoll in Fuß mit =CONVERT(A1,"in","ft") konvertieren (A1 enthält die zu konvertierende Zahl) oder Bytes in Bits mit =CONVERT(A1,"byte","bit). Diese CONVERT Funktion arbeitet mit den vordefinierten Einheiten von Excel.Excel: Können benutzerdefinierte Einheiten für die CONVERT-Funktion definiert werden?

Gibt es eine Möglichkeit, benutzerdefinierte Einheiten wie "Stück" oder "Dutzend" oder "Wanne" zu definieren? Ich habe excel "bit" Einheit anstelle von "Stück" verwendet. Ich würde gerne Konvertierungen wie =CONVERT(3,"dozen","piece") machen (das Ergebnis der Auswertung sollte 36 sein).

Natürlich könnte man eine Tabelle von kundenspezifischen Einheiten zusammen mit ihren Umrechnungen in Standardeinheiten pflegen (z. B. 1 Stück = 1 Bit, 1 Dutzend = 12 Bits). Die Konvertierung könnte dann mit einer modifizierten Konvertierungsfunktion =MYCONVERT(3,"dozen","piece") durchgeführt werden, die die benutzerdefinierten Einheiten aus der Tabelle nachschlagen würde. Aber gibt es eine elegante Möglichkeit, die ursprüngliche CONVERT-Funktion funktionsfähig zu machen und Workarounds zu vermeiden, indem man einfach die Liste der vordefinierten Einheiten von Excel hinzufügt?

Antwort

1

Warnung: Dies beantwortet nicht Ihre genaue Frage, aber es versucht, eine mögliche Lösung bereitzustellen.

Ich weiß nicht, wie man genau das macht, was Sie fragen ... aber vielleicht gibt es eine Kompromisslösung, bei der Sie eine UDF verwenden können und die UDF zuerst die Arbeitsblattfunktion aufruft. Wenn es funktioniert, gib das Ergebnis zurück. Andernfalls gehen Sie in Ihre benutzerdefinierte Funktion. Das bedeutet nur, dass Sie alle Instanzen von CONVERT durch MYCONVERT ersetzen müssen, was von meinem eingeschränkten Standpunkt aus als ein vernünftiger Kompromiss erscheint.

Hier ist eine kurze Probe, wie dies aussehen könnte.

Individuelle Umwandlung vorformulierten:

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 

Und Ihre 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 

Und nun eine dieser sollte funktionieren:

=MYCONVERT(A1,"in","ft") 
=MYCONVERT(3,"dozen","piece") 
Verwandte Themen