我有一个包含几列的数据库,可以按以下格式存储高度数据......
8英尺4英寸
5英尺1英寸
8英尺6英寸
12 ft 0 in
依此类推......对于超过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公式。
希望有人可以提供帮助。所有其他线程都包含值的转换,这些转换的格式与我的格式不同。谢谢!
答案 0 :(得分:4)
如果你想要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
答案 1 :(得分:4)
单线VBA:
Function ConvertFtInches(pInput As String) As Double
ConvertFtInches = Split(pInput, " ft ")(0) + Split(Split(pInput, " ft ")(1), " in")(0) / 12
End Function
答案 2 :(得分:1)
这是一个可行的Excel公式:
=VALUE(LEFT(A1,FIND("ft",A1)-1))+(VALUE(SUBSTITUTE(RIGHT(A1,LEN(A1)-FIND(" ",A1)),"in",""))/12)
答案 3 :(得分:0)
只能处理英寸(即不将它们转换为日期!):
=IFERROR(LEFT(A1,FIND(" ft",A1)),0)+LEFT(RIGHT(A1,5),2)/12