2017-08-04 107 views
3

我有与存储在以下格式高度数据几列的数据库小数英尺...转换英尺和英寸(例如,“5英尺1”),以使用VBA或Excel

8英尺4在

5英尺1

8英尺6

12英尺0

等等...为20K +记录在3列。我需要使用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公式。

希望有人可以提供帮助。所有其他线程都包含未格式化为与我的格式相同的值的转换。谢谢!

回答

4

一个衬垫VBA:

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

这就是为什么我仍然给你一个'+ 1' –

+0

@Scott Craner你+1是+1,谢谢 – Tehscript

+0

漂亮,谢谢! – BWasse

1

这里有一个Excel公式,将工作:

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

enter image description here

+1

IMO简单:'= 1 * SUBSTITUTE(SUBSTITUTE(A19, “中”, “/ 12”),”英尺“,”“)'(假设紧接在'ft'之前的空格),但我认为两者都只有英寸失败。 – pnuts

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 

enter image description here

+1

正准备修复VBA。 :)你的解决方案与'split'很好。 –

+0

当'4 in' +1 – Tehscript

+0

完美时不失败!谢谢! – BWasse

0

能应付只有几英寸(即不将它们转换成日期!):

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