一、度分秒值换算为度
首先要将单位符号都去掉,形成 1112233 的形式,分秒小于十的要在其前补0,必须如此,不然无法判断分与秒的位置。
假设原始数据在A列,第一个数据在A2单元格。
在你需要放入转换结果的一个单元格内(最好是与A2同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600
回车即可。
下面解释转换方法和函数意义。
以 1112233 为例。
算法是111+(22/60)+(33/3600),即把分、秒都算成度后相加。
MID:意为选择指定的字符,具体写法为MID(数据,顺位,字符数),先指定1-3位(度位),再指定4-5
位(分位)/60,再指定6-7位(秒位)/3600。
value:意为转换成为数值,这样才能进行运算。
关键问题在于,度有可能是2位数,如果这样整个数就是6位,上例算式中的
IF(LEN(A2)=6,CONCATENATE("0",A2),A2)
就是处理这样的问题的。意思为如果整个是6位数,就在其前补个0,若不是6位,就直接用原来的数值(呵呵,在中国及周边没有6位和7位以外的经纬度,现在这个算法适用于6位和7位的经纬度)。
IF:条件函数,用法:IF(logical_test,value_if_true,value_if_false),其中logical_test为判断条件,在本例中为LEN(A2)=6,满足条件执行value_if_true,不满足则执行value_if_false。
LEN:为返回字符数的函数。
CONCATENATE:为合并字符函数,写法为:CONCATENATE(text1,text2,...),如要直接使用文本字符,就在其上加英文引号。
二、度转换为度分秒
假设原始数据在A列,第一个数据在A2单元格。
在你需要放入转换结果的一个单元格内(最好是与A2同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=CONCATENATE(INT(A2),IF(INT((A2-INT(A2))*60)<10,CONCATENATE("0",INT((A2-INT(A2))*60)),INT((A2-INT(A2))*60)),IF(ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10,CONCATENATE("0",ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)))
回车即可。
解释如下:
以112.1234567度为例。
使用 CONCATENATE 文本组合函数,将分别计算出的度、分、秒组合在一起(其用法参照前一帖)。
本例中的INT(A2),取的是112,即度值;IF(INT((A2-INT(A2))*60)<10,CONCATENATE("0",INT((A
2-INT(A2))*60)),INT((A2-INT(A2))*60))取的是分值;IF(ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10,CONCATENATE("0",ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),取的是秒值。
比较关键的一点
是,分、秒在计算完后可能会小于10,这样就会出现本应为7位的度分秒值成了6位或5位,因此在计算分和秒时,加了一个条件语句,即若其值小于10,就在前面补个0。INT((A2-INT(A2))*60)<10是判断分值是否小于10;ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10是判断秒值是否小于10。
INT 是取整函数,可对任意实数向下取整为最接近的整数,向下的意思为往小的方向,如 =INT(3.38)返回3,=INT(-3.38)返回-4。该函数与 TRUNC 函数都有取整的功能,TRUNC 函数可以按需要截取数字的小数部分,而 INT 函数则将数字向下舍入到最接近的整数。INT 和TRUNC 函数在处理负数时不同点:TRUNC(-4.3,0)返回-4,而INT(-4.3)返回-5。
ROUND 为四舍五入函数,本例中秒值不再留有小数,因此将其四舍五入了,这就是计算分值的时候用 INT 函数,而计算秒值的时候用 ROUND 函数的原因。该函数的写法为 ROUND(number,num_digits),其中的number是待处理的数值(也可是表达式的结果),num_digits是保留的小数位数。
本例中的小数保留
三、求度分秒范围转度的中心坐标值
这里只算经度或纬度的一项,要算另一项,只需改动原始数据位置,重复操作即可。
假设原始数据在A列和B列,B列数据比A列数据大。第一个数据项在A2和B2。
每个值的算法原理是:
将经纬度都设立成7位,将度、分、秒都折算成度,转换方法参照前帖。用度来计算的好处是不会产生度分秒的进位问题,而同时度也可在上图时使用,若想将度转换成度分秒,就参照本人的前一帖。
结果的算法是(B2-A2)/2+A2。
在你需要放入转换结果的一个单元格内(最好是与A2、B2的同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=((value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),B2),1,3))+value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),B2),4,2))/60+value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),
A2),6,2))/3600)-(value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600))/2+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600
回车即可。
[Excel]在一个Excel单元格中实现度、分、秒转换
怎样在Excel一个 单元格中输入度分秒再转换成小数度或弧度一直困绕许多测量同行,网上有许多用VBA 编辑的自定义函数当然可行,但对大多数不会编辑VBA的测量同行而言,这不仅存在编辑上的困难,也存在调用上的不方便。为此,我直接用公式在EXCEL
中轻松实现了在一单元格中对度、分、秒的转换,转换后的角度精度等同转换前,现介绍:
1、度、分、秒在一个单元格中转换成小数度。设A1为输入的度、分、秒单元格,B1为小数度单元格,若A1=256.3246(读着256度32分46秒),则:
B1=INT(A1)+INT(100*MOD(A1,1))/60+MOD(A1*100,1)/36
2、度、分、秒在一个单元格中转换成弧度。设置引用同上.
int函数与round函数B1=RADIANS(INT(A1)+100*MOD(A1,1)/60+MOD(A1*100,1)/36)
这样就轻松实现了在一个单元格中对角度的转换运算,比在三个单元格中分别输入度、分、秒的格式简单适用,也可以解决VBA编辑的困难和调用的复杂性,使用时,只需在需要进行换算的单元格中复制或粘贴公式即可进行计算。
3、考虑负角度输入时,公式应修改为:
B1=SIGN(B1)*RADIANS(INT(ABS(A1))+100*MOD(ABS(A1),1)/60+MOD(ABS(A1)*100,1)/36)
角度在Excel中的换算
为解决一些同仁急需了解角度在Excel表格中运算和显示的一些特征,特发表以下意见供参考:
1、60进制角度在Excel 中的运算:
不论是角度直接计算还是导入函数都应为:RADIANS(度+分/60+秒/3600);
2、坐标反算后的方位角(包括直线或曲线)的运算与显示:在Excel中整个角度运算都是以弧度为单位的。应该说弧度在数值运算中是最简便的,而60进制的角度只是我们阅读习惯问题,因此,为了解决这个问题,最好把参与运算的弧度放在后台,而适合我们阅读形式的°′″放在可读的单元格上。角度运算的最后结果怎样以度、分、秒形式显示呢?
  ①、最笨的办法作成三列显示。假设A10(在后台)为弧度,A1、A2、A3分别为度、分、秒
A1 =INT(DEGREES(A10));(取整角度)
A2 = INT((DEGREES(A10)-A1)*60);(余数乘60取整分)
A3 =(DEGREES(A10)-A1-A2/60)*3600。(再对剩余余数乘3600取秒)
以上三列构成一个60进制完整的角度值,可以再参与运算,其精度等同弧度。
②、在一列中直接显示带°′″的角度,设A1为放60进制角度单元格:
A1  =INT(DEGREES(A10]))&"°"&INT((DEGREES(A10)-INT(DEGREES(A10)))*60)&"′"&INT((((DEGR
EES(A10)-INT(DEGREES(A10)))*60)-INT(((DEGREES(A10)-INT(DEGREES(A10)))*60)))*60)&"″"    第二种显示为数值与文本的混合格式,其值不能参与普通数值运算,但可以作文本混合运算 。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。