Excel 将英尺和英寸转换为十进制格式

Excel 将英尺和英寸转换为十进制格式,excel,excel-formula,converter,vba,Excel,Excel Formula,Converter,Vba,我有大约3600个高度,格式为英尺-英寸-英寸-英寸高,例如: 5103 = 5 feet, 10 and 3/8 inches 6000 = 6 feet 6022 = 6 feet, 2 and 2/8 inches 我需要用公式或宏将它们转换成十进制格式,这样它们的结果将是: 5103 = 5.864 6000 = 6.000 6022 = 6.187 因为我有3600多台这样的机器,手工工作会很痛苦。如何将此格式转换为英尺和英寸的十进制格式?在a列中有数据时,在B1中输入: =--L

我有大约3600个高度,格式为英尺-英寸-英寸-英寸高,例如:

5103 = 5 feet, 10 and 3/8 inches
6000 = 6 feet
6022 = 6 feet, 2 and 2/8 inches
我需要用公式或宏将它们转换成十进制格式,这样它们的结果将是:

5103 = 5.864
6000 = 6.000
6022 = 6.187

因为我有3600多台这样的机器,手工工作会很痛苦。如何将此格式转换为英尺和英寸的十进制格式?

a列中有数据时,在B1中输入:

=--LEFT(A1,1)+MID(A1,2,2)/12+RIGHT(A1,1)/(12*8)
并抄写:

注:

此转换产生十进制英尺,因此2英尺6英寸显示2.5英寸

编辑#1:

如果您需要在A列中容纳超过9英尺,则公式应为:

=--LEFT(A1,LEN(A1)-3)+MID(A1,LEN(A1)-2,2)/12+RIGHT(A1,1)/(12*8)

使用列A中的数据,在B1中输入:

=--LEFT(A1,1)+MID(A1,2,2)/12+RIGHT(A1,1)/(12*8)
并抄写:

注:

此转换产生十进制英尺,因此2英尺6英寸显示2.5英寸

编辑#1:

如果您需要在A列中容纳超过9英尺,则公式应为:

=--LEFT(A1,LEN(A1)-3)+MID(A1,LEN(A1)-2,2)/12+RIGHT(A1,1)/(12*8)

如果您需要走很长的路,VBA UDF似乎是最方便的方法

Function feet2dec(str As String) As Double
    Dim v As Long, vtmp As Variant, tmp As String
    Dim feet As Double

    vtmp = Split(str, Chr(44))
    For v = LBound(vtmp) To UBound(vtmp)
        Select Case LCase(Right(Trim(vtmp(v)), 4))
            Case "feet"
                feet = feet + Val(Trim(Replace(vtmp(v), "feet", vbNullString, 1, -1, vbTextCompare)))
            Case "ches"
                str = Replace(vtmp(v), "inches", vbNullString, 1, -1, vbTextCompare)
                str = Application.Trim(Replace(str, "and", vbNullString, 1, -1, vbTextCompare))
                feet = feet + Application.Evaluate(str) / 12
        End Select
    Next v

    feet2dec = feet
End Function

如果您需要走很长的路,VBA UDF似乎是最方便的方法

Function feet2dec(str As String) As Double
    Dim v As Long, vtmp As Variant, tmp As String
    Dim feet As Double

    vtmp = Split(str, Chr(44))
    For v = LBound(vtmp) To UBound(vtmp)
        Select Case LCase(Right(Trim(vtmp(v)), 4))
            Case "feet"
                feet = feet + Val(Trim(Replace(vtmp(v), "feet", vbNullString, 1, -1, vbTextCompare)))
            Case "ches"
                str = Replace(vtmp(v), "inches", vbNullString, 1, -1, vbTextCompare)
                str = Application.Trim(Replace(str, "and", vbNullString, 1, -1, vbTextCompare))
                feet = feet + Application.Evaluate(str) / 12
        End Select
    Next v

    feet2dec = feet
End Function

Val()和Evaluate()的巧妙使用Val()和Evaluate()的巧妙使用就像一个符咒,只要你的身高(英尺)不超过一位数。如果你有10英尺或更多的东西会爆炸@转发您是正确的…………我们需要检查参数的长度并进行调整。@转发请参阅我的编辑#1@ForwardEd没错,但由于这些是人类的身高,这是非常重要的unlikely@MJ95对不起,我没意识到我们在谈论人。因此,我们只是看看一般的方法。如果你的身高以英尺为单位永远不会超过一位数,那么它就像一个符咒。如果你有10英尺或更多的东西会爆炸@转发您是正确的…………我们需要检查参数的长度并进行调整。@转发请参阅我的编辑#1@ForwardEd没错,但由于这些是人类的身高,这是非常重要的unlikely@MJ95对不起,我没意识到我们在谈论人。因此,我只是在看一般方法。