Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2424|回复: 3

VBA角度转换为数值

[复制链接]
发表于 2015-6-16 11:22 | 显示全部楼层 |阅读模式
=deg("90°51′48.6″")
计算得出答案有误。.
请问那一步错了?   
正确答案=90.86333333  

90°= 90
90°51°=90+51/60
90°51′48.6 =90+51/60+48.6/3600 =90.8635    ‘转换角度时为正确的

’转换代码
Function Deg(reg As String) As Double
Dim a As Double
Dim b As Double
Dim c As Double
a = Val(Left(reg, InStr(1, reg, "°") - 1))
b = Val(Mid(reg, InStr(1, reg, "°") + 2, _
InStr(1, reg, "′") - InStr(1, reg, _
"°") - 2)) / 60
c = Val(Mid(reg, InStr(1, reg, "′") + _
2, Len(reg) - InStr(1, reg, "′") - 2)) _
/ 3600
Deg = a + b + c
End Function

发表于 2015-6-16 11:36 | 显示全部楼层
val只取前面有效的数值,比如val("12akboie452")=12,所以根本不用考虑截取长度的。
回复

使用道具 举报

发表于 2015-6-16 13:26 | 显示全部楼层
所有+2改成+1,所有-2改成-1就对了。
  1. Function Deg(reg As String) As Double
  2.     Dim a As Double
  3.     Dim b As Double
  4.     Dim c As Double
  5.     a = Val(Left(reg, InStr(1, reg, "°") - 1))
  6.     b = Val(Mid(reg, InStr(1, reg, "°") + 1, InStr(1, reg, "′") - InStr(1, reg, "°") - 1)) / 60
  7.     c = Val(Mid(reg, InStr(1, reg, "′") + 1, Len(reg) - InStr(1, reg, "′") - 1)) / 3600
  8.     Deg = a + b + c
  9. End Function
复制代码
回复

使用道具 举报

发表于 2015-6-16 13:28 | 显示全部楼层
可以简化一点,把mid中截取长度的代码去掉。
  1. Function Deg(reg As String) As Double
  2.     Dim a As Double
  3.     Dim b As Double
  4.     Dim c As Double
  5.     a = Val(reg)
  6.     b = Val(Mid(reg, InStr(1, reg, "°") + 1)) / 60
  7.     c = Val(Mid(reg, InStr(1, reg, "′") + 1)) / 3600
  8.     Deg = a + b + c
  9. End Function
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-4 23:36 , Processed in 0.630487 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表