使用 VBA 或 Excel 将英尺和英寸(例如,“5 英尺 1 英寸”)转换为十进制英尺

Converting feet & inches (e.g., "5 ft 1 in") to decimal feet using VBA or Excel

我有一个数据库,其中有几列以下列格式存储高度数据...

8 英尺 4 英寸

5 英尺 1 英寸

8 英尺 6 英寸

12 英尺 0 英寸

等等...对于超过 3 列的 20k+ 记录。我需要使用 excel 公式或 VBA 模块将其转换为十进制英尺。我已经改编了另一个 VBA 脚本,我用来将以度分秒为单位的坐标转换为十进制,但我不确定哪里出错了...

Function ConvertFtInches(pInput As String) As Double
'Updateby20140227
Dim xFt As Double
Dim xIn As Double
xFt = Val(Left(pInput, InStr(1, pInput, " ft") - 1))
xIn = Val(Mid(pInput, InStr(1, pInput, " ft") + 2, _
             InStr(1, pInput, " in") - InStr(1, pInput, _
             " ft") - 2)) / 12
ConvertFtInches = xFt + xIn
End Function

...我可能完全不了解,因为我是 VBA 的初学者。剧本肯定有问题,因为它是从不同的剧本改编而来的。可能有一个更容易使用的 excel 公式。

希望有人能提供帮助。所有其他线程都包含对值的转换,这些值的格式与我的不同。谢谢!

这是一个可以使用的 Excel 公式:

=VALUE(LEFT(A1,FIND("ft",A1)-1))+(VALUE(SUBSTITUTE(RIGHT(A1,LEN(A1)-FIND(" ",A1)),"in",""))/12)

如果你想要vba:

Function ConvertFtInches(pInput As Range) As Double

Dim str As String
Dim strArr() As String
str = Replace(pInput.Value, "ft", " ")
str = Replace(str, "in", "")
strArr = Split(Application.Trim(str), " ")
If LBound(strArr) = UBound(strArr) Then
    ConvertFtInches = strArr(0) / 12
Else
    ConvertFtInches = strArr(0) + strArr(1) / 12

End If        

End Function

一条线VBA:

Function ConvertFtInches(pInput As String) As Double
ConvertFtInches = Split(pInput, " ft ")(0) + Split(Split(pInput, " ft ")(1), " in")(0) / 12
End Function

只能处理英寸(即不将其转换为日期!):

=IFERROR(LEFT(A1,FIND(" ft",A1)),0)+LEFT(RIGHT(A1,5),2)/12