2016-12-30 2 views
1

В Excel вы можете конвертировать дюймы в футы с =CONVERT(A1,"in","ft") (где A1 содержит число, которое нужно преобразовать), или байты в биты с =CONVERT(A1,"byte","bit). Эта функция CONVERT работает с предустановленными устройствами excel.Excel: Можно ли настраивать отдельные единицы для функции CONVERT?

Есть ли способ определить пользовательские единицы, такие как «кусок» или «дюжина» или «ванна»? Я использовал блок 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") 
Смежные вопросы