如何使用Excel公式完成DMS格式化及转换为十进制度DD
Excel DMS格式坐标转十进制度DD方案
首先预设你的原始坐标存储在A列,格式为方向字母+空格+度+空格+分+空格+秒,示例如下:
- E 121 28 56
- N 31 14 22.7
- W 118 32 10
- S 22 15 33.5
方案1:Excel 365/2021及以上版本(公式更简洁易维护)
直接在B1单元格输入以下公式,下拉即可批量转换:
=LET( arr,TEXTSPLIT(TRIM(A1)," "), sign,IF(OR(INDEX(arr,1)={"E","N"}),1,-1), d,--INDEX(arr,2), m,--INDEX(arr,3), s,--INDEX(arr,4), sign*(d+m/60+s/3600) )
公式逻辑说明:
- 用TRIM去除原始数据前后多余空格
- 用TEXTSPLIT按空格拆分坐标为方向、度、分、秒4个部分
- 匹配方向得到正负符号,E、N为正,W、S为负
- 按
度 + 分/60 + 秒/3600的规则计算后乘以符号得到最终十进制度
方案2:旧版Excel兼容方案(适配无LET/TEXTSPLIT函数的版本)
在B1单元格输入以下公式,下拉即可:
=INDEX({1,1,-1,-1},MATCH(LEFT(TRIM(A1),1),{"E","N","W","S"},0))*(TRIM(MID(TRIM(A1),3,FIND(" ",TRIM(A1),3)-3)) + TRIM(MID(TRIM(A1),FIND("}}}",SUBSTITUTE(TRIM(A1)," ","}}}",2))+1,FIND("}}}",SUBSTITUTE(TRIM(A1)," ","}}}",3))-FIND("}}}",SUBSTITUTE(TRIM(A1)," ","}}}",2))-1)/60 + TRIM(MID(TRIM(A1),FIND("}}}",SUBSTITUTE(TRIM(A1)," ","}}}",3))+1,99))/3600
你原有公式报错的核心问题是度部分的截取长度计算错误,且未处理原始数据前后的冗余空格,上述公式已修复对应问题。
注意事项
- 若需要保留固定位数小数,可在外层嵌套
ROUND函数,比如保留6位小数写作=ROUND(上述公式,6) - 若公式返回错误值,请检查对应行的原始坐标格式:确保方向后、度、分、秒之间均为半角空格分隔,无其他多余特殊字符
- 支持带有小数的分、秒格式转换
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

