ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13624|回复: 17

[原创] EXCEL2010工程应用实例之标高计算系统

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-11 00:13 | 显示全部楼层 |阅读模式
本帖最后由 lbc_94 于 2011-11-27 13:52 编辑

标高计算系统
刘炳仓
QQ:78006877
标高计算是在公路工程中属于测量方面的工作,这个工作并不难,但是比较麻烦,计算某一个里程的标高,只要查出相关参数,计算标高就不会出现什么问题,但是每次要去查出相关参数在工作程序上是比较烦人的,时间久了出现问题是不可避免的。在公路施工过程中,测量工作在标高方面出现的问题并不少见,这对工程进度和成本都造成损失,为了减少这一错误,本人编写了《标高计算》表进行处理工作上的问题。使用标高计算之前,首先把图纸中的相关竖曲线参数输入到《竖曲线参数》表中,检查无误后保存,在以后的工作中,要计算某一个里程的标高,只在《标高计算》表中输入计算里程,中桩的设计标高自动计算出来,当然这个标高是设计的路面高程。知道了这个高程,同一点的其它高程那就是简单的加减工作了。要说明的是本计算表不能对设计中出现的长短链进行自动处理,这需要在计算的时候手工处理。
设计这个表格之前,让我们先看看竖曲线的两个计算公式:
直线段计算公式:H=i*(l1-lq)+h1;
抛物线的计算公式:H=-(l1-lq)^2/2R+(l1-lq)*i+h1;
注:H为需要计算点的高程;i为坡度;l1为计算点里程;lq为竖曲线(直线)起点里程;h1为起点高程;R为竖线参数。
        竖曲线参数(标签名:竖曲线参数)

本表为竖曲线参数输入表,计算一个线段的标高之前,首先要输入这一段的参数,参数输入好之后,在《标高计算》表中就可以进行标高计算。这个表中从A列到G列的参数是用户输入的,输入时要注意参数的输入格式:
1、【曲线起点坡度】栏:上坡为正,下坡为负。
2、【切线长或直线长度】栏:起始点必需为直线,起始单元格数据是从起点到抛物线起点的直线长度。
3、【切线长或直线长度】栏:起始点以后的单元格填写的内容为抛物线的切线长度,直线对应的单元格不填数据。
4、在曲线类型栏内输入参数时,必需是“直线→抛物线→直线→抛物线→……”这种循环方式填写,即使是两条抛物线相接,它们中间也要插入直线段,插入的这条直线的长度为“0”,如果是两条不同坡度的直线相接,中间也要插入一条抛物线,抛物线的长度也为“0”;
5、线型结束点的曲线半径填写值为“1”,切线长或直线长度栏填写值为“0”。
6、如果遇到断链,需另建文件重新填写,不能在一个表中连续填写,本表不能自动处理不连续里程的问题。
上面讲述的是本表的使用方法和注意事项,下面对公式的设置进行逐个说明。
【起点里程】H5公式:=IF(G5="","",IF(AND(B5="直线",C5<>""),C5,IF(AND(B5="直线",C5=""),J4, IF(B5="抛物线",C5-F5,""))))
H5公式作用:通过已知函数计算出曲线的起点里程。在这个公式中出现了AND函数,AND在英文中是“并且”的意思。
公式解释:如果G5(坡度)为空时,H5为空;否则进入下一个IF函数,如果B5等于“直线”并且C5(曲线顶点或起点里程)不等于空时H5等于C5,即AND函数中的两个公式均满足要求时才能进行进入这一条件;否则进入下一个IF函数,如果B5等于“直线”并且C5等于空时,H5等于J4(上一个结束点里程);否则进入下一个IF函数,如果B5等于“抛物线”,H5等于“C5-F5”(【曲线顶点或起点里程】-【切线长或直线长度】),否则为空。
【起点标高】I5公式:=IF(G5="","",IF(AND(B5="直线",E5<>""),ROUND(E5,3),IF(AND(B5="直线", E5=""),ROUND(K4,3),IF(B5="抛物线",ROUND(E5-F5*G5,3),""))))
I5公式作用:通过已知参数计算出曲线起点标高。
公式解释:如果G5等于空,I5就等于空;否则进入下一个IF函数,如果B5等于“直线”并且E5(切线顶点或起点标高)等于空时,I5等于E5;否则进入下一个IF函数,如果B5等于“直线”并且E5等于空时,I5等于K4(上一个结束点标高);否则进入下一个IF函数,如果B5等于“抛物线”,I5等于“E5-F5*G5”(【切线顶点或起点标高】-【切线长或直线长度】×【曲线起点坡度】)。
【结束点里程】J5公式:=IF(G5="","",IF(AND(B5="直线",F5<>""),H5+F5,IF(AND(B5="直线", E5=""),H6,IF(B5="抛物线",C5+F5,""))))
J5公式作用:通过已知参数计算出曲线结束点的里程。
公式解释:如果G5等于空,J5就等于空;否则如果B5等于“直线”并且F5不等于空,J5就等于“H5+F5”(【起点里程】-【切线长或直线长度】);否则进入下一个IF函数,如果B5等于“直线”并且E5等于空,J5就等于H6(下一个起点里程);否则进入下一个IF函数,如果B5等于“抛物线”,J5就等于C5+F5,否则J5等于空。
【结束点标高】K5公式:=IF(G5="","",IF(B5="抛物线",ROUND(I5+(J5-H5)*G5-(J5-H5)^2/(2*D5),3), IF(B5="直线",ROUND(I5+(J5-H5)*G5,3),"")))
K5公式作用:通过已知参数计算出曲线结束点的高程。这里还出现了“^”字符,它是个次方运算符,“(J5-H5)^2”的意思是“(J5-H5)”的2次方。这个公式是利用前面讲到的两个标高计算公式计算出结束点里程的标高。
公式解释:如果G5等于空,K5就等于空;否则进入下一个IF函数,如果B5等于抛物线,就利用抛物线方程计算结束点高程;否则进入下一个IF函数,如果B5等于直线,就利用直线方程计算结束点里程的高程,否则K5等于空。
【长度】L5公式:=IF(OR(H5="",J5=""),"",IF(ABS(J5-H5)<0.01,"",J5-H5))
L5公式作用:通过已知参数计算出曲线长度。
【数据检测】M6(注意不是M5,M5为起点行,本单元格中没有公式)公式:=IF(I6="","",IF(ABS(I6- K5)>0.005,"错误",""))
M6公式作用:检查输入的参数正确性,如果输入的参数有错误,有一部份这个公式能检查出来。这里出现了ABS函数,这个函数的作用是取绝对值。
公式解释:如果曲线起点标高为""(空),检测单元格值就等于空,否则如果曲线起点高程减去上一条曲线结束点高程的绝对值大于0.005,说明输入的参数有"错误",否则显示为""(空)。
以上公式在相应的列中是通用的,设置好之后下拉即可,下拉之后要保证A列序列号的连续性,否则标高无法计算。本表中公式的作用是计算出每一条竖曲线的相关参数,应用在后面的《标高计算》表中。
本表B列【曲线类型】栏中有下拉列表,下拉列表的创建如下:
选中B5→EXCEL菜单→数据→数据有效性→数据有效性→

照图设置后确定即可。“来源”中填写的项目之间用小写“,”号分开
设置好后选中B5单元格,需要多少行下拉多少行。
在本表的C、H、J列有个关于里程的格式设置,如输入的数据是“10072.19”,但显示格式主“K10+072.190”,这个格式的设置方法:
选中单元格→点击右键→设置单元格格式→

→在类型栏内输入“K###+##0.000”确定即可。

        标高计算(标签名:标高计算)

《竖曲线参数》表处理好了相关参数,本表的作用就是利用《竖曲线参数》表中的参数计算出任意里程点的标高,为了学习方便,本表分成了两部份,一部份是《标高计算》,另一部份是要计算里程点的《对应参数》,【中桩高程】是通过《对应参数》表中的对应参数计算出来的。本表中B、D-H列为用户填写部份,填写的内容分别是计算点的里程、偏距、中央分隔带宽度、偏向(左偏还是右偏)、横坡(上坡为正,下坡为负)、调整值(本表计算出的中桩高程为路面设计标高,计算某一个部位的标高时,需要计算出该部位与路面的差值即为要调整的数据),其余部份均为自动计算。本表A、C、I-T列的公式分别是:
A5公式:=IF(B5<>"",ROW(B5)-COUNTIF($B$5:B5,"")-4,"")
A5公式作用:在A列自动生成序列号,即B列任意一个单元格出现数据,在对应的A列的就产生一个相应的序号,有了这个公式,A列序列号的产生与B列数据是否连续性出现没有关系,只要B列任一单元格不为空时A列对应的单元格就产生相应的序列号,在B列空单元格处不产生序号。

这里出现了ROW和COUNTIF函数,ROW函数的功能是返回引用单元格的行号,COUNTIF函数的功能是对区域中满足指定条件的单元格进行计数,这个函数在这里的作用是返回区域中的空格数量。注意COUNTIF函数中的“$”的使用,用这个符号的作用是在A5单元格中的公式设置好后,在下拉的过程中,指定区域的的前一个参数“$B$5”不发生变化,第二个参数“B5”随着公式的拖动而变化,即这个函数指定区域的上限不变化,下限随着下拉而改变。如到第10行时,这个公式就变更成“=IF(B10<>"", ROW(B10)-COUNTIF($B$5:B10,"")-4,"")”,COUNTIF函数区域的上限没有变化,仍为“$B$5”,下限发生了变化,变化成与所在单元格的同一行号,即为“B10”(第十行)。
公式解释:如果B5不等于空,则用ROW函数返回所在的行数,减去用COUNTIF函数统计的空格数量再减去4,因为本表中数据统计是从第四行开始的,故需要减去“4”。
C5公式:=IF(AND(K5="直线",B5<>""),ROUND(SUM(R5)+(SUM(B5)-SUM(Q5))*SUM(P5),3),IF(AND(K5="抛物线",B5<>""),ROUND(SUM(R5)+(SUM(B5)-SUM(Q5))*SUM(P5)-(SUM(B5)-SUM(Q5))^2/(2*SUM(M5)),3),""))
C5公式作用:通过K列单元格中进行线形判断要计算的数据是“直线”还是“抛物线”,并套用相应的公式进行计算。这里为什么要对R5、B5、Q5等单元格用求和公式SUM(),原因是有些单元格中因使用公式产生了""的非数字格式,看似没有数据,但是两个单元格相乘时会出现“#VALUE!”结果,使用SUM函数可以解决这个问题。
I5公式:=IF(C5<>"",ROUND(C5+(D5-E5/2)*G5+H5,3),"")
I5公式作用:通过已知的【中桩标高】、【偏距】、【中央分隔带宽度】、【横坡】、【调整值】计算出所需点的高程。
J5公式:=IF(B5="","",IF(B5<竖曲线参数!C$5,"",IF(B5>竖曲线参数!C$5+SUM(竖曲线参数!L$5:L$3000),"",MATCH(B5,竖曲线参数!H:H,1)-4)))
J5公式作用:判断B5单元格输入的里程在《竖曲线参数》表中的区间范围的行号,然后减去4处理成对应的序列号。J5单元格公式中出现了MATCH函数,这个函数的功能是在单元格区域(区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻。)中搜索指定项,然后返回该项在单元格区域中的相对位置,在这个函数中第三个参数为“1”,它的用意是在指定的区域内无精确匹配项时,此函数将返回指定区域中最接近的下一个最小值的位置。
公式解释:如果B5(里程单元格)等于空,J5就等于空;否则进入下一个IF函数,如果B5的值小于“竖曲线参数!C$5”单元格的值(竖曲线参数的起点里程),J5就等于空;否则进入下一个IF函数,如果B5大于“竖曲线参数!C$5+SUM(竖曲线参数!L$5:L$3000)”的值(结束点的里程),J5就等于空,否则J5就等于“MATCH(B5,竖曲线参数!H:H,1)-4”的值。
K5公式:=IF(J5="","",VLOOKUP(J5,竖曲线参数!A:K,2,FALSE))
K5公式中出现了VLOOKUP和FALSE函数,VLOOKUP函数的作用是搜索某个单元格区域(区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻。)的第一列,然后返回该区域相同行上任何单元格中的值;FALSE是VLOOKUP函数的一个参数,它表示VLOOKUP函数在执行过程中使用的是精确匹配;如果VLOOKUP函数的最后一个参数是TRUE,它表示VLOOKUP函数在执行过程中使用的是近似匹配。
L5公式:=IF(J5="","",IF(SUM(VLOOKUP(J5,竖曲线参数!A:K,3,FALSE))=0,"",VLOOKUP(J5,竖曲线参数!A:K,3,FALSE)))
M5公式:=IF(J5="","",IF(SUM(VLOOKUP(J5,竖曲线参数!A:K,4,FALSE))=0,"",VLOOKUP(J5,竖曲线参数!A:K,4,FALSE)))
N5公式:=IF(J5="","",IF(SUM(VLOOKUP(J5,竖曲线参数!A:K,5,FALSE))=0,"",VLOOKUP(J5,竖曲线参数!A:K,5,FALSE)))
O5公式:=IF(J5="","",IF(SUM(VLOOKUP(J5,竖曲线参数!A:K,6,FALSE))=0,"",VLOOKUP(J5,竖曲线参数!A:K,6,FALSE)))
P5公式:=IF(J5="","",IF(SUM(VLOOKUP(J5,竖曲线参数!A:K,7,FALSE))=0,"",VLOOKUP(J5,竖曲线参数!A:K,7,FALSE)))
Q5公式:=IF(J5="","",VLOOKUP(J5,竖曲线参数!A:K,8,FALSE))
R5公式:=IF(J5="","",VLOOKUP(J5,竖曲线参数!A:K,9,FALSE))
S5公式:=IF(J5="","",VLOOKUP(J5,竖曲线参数!A:K,10,FALSE))
T5公式:=IF(J5="","",VLOOKUP(J5,竖曲线参数!A:K,11,FALSE))
从K-T列公式的作用是通过J列生成的序列号的控制,提取相应的竖曲线参数,本表中的公式设置好后均可下拉。
在B栏中有数据格式设置,设置方法与《竖曲线参数》表中C、H、J列设置相同,可能参照设置。
数据输入时经常会出现错误输入或输入的数据超出范围,为了防止里程输入超出范围,在B栏的进行输入设置,设置方法:选中B5:B3000→EXCEL菜单→数据→数据有效性→数据有效性→

→按照图中设置即可,其中最大值中的公式为“=竖曲线参数!$H$5+SUM(竖曲线参数!L$5:L$3000)”→点击“出错警告”→

→按照图便设置确定即可。
说明:
VLOOKUP()函数:搜索某个单元格区域(区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻。)的第一列,然后返回该区域相同行上任何单元格中的值。例如,假设区域A2:C10中包含雇员列表,雇员的ID号存储在该区域的第一列,如下图所示。

如果知道雇员的ID号,则可以使用VLOOKUP函数返回该雇员所在的部门或其姓名。若要获取38号雇员的姓名,可以使用公式“=VLOOKUP(38,A2:C10,3,FALSE)”。此公式将搜索区域A2:C10的第一列中的值38,然后返回该区域同一行中第三列包含的值作为查询值(“Axel Delgado”)。
这个表设置不那样复杂,按照图便能创建。创建完成后即可进行标高计算。在这里再强调一下,输入参数时要计算出整段竖曲线的起点高程,起点的直线长度,因为这个数据在数据参数表中没有,参数表中给定的数据是以抛物线的形式给定,没有起点的里程和标高。

[ 本帖最后由 lbc_94 于 2011-8-11 19:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-8-11 07:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主分享  这算是excel在行业中的具体应用了

TA的精华主题

TA的得分主题

发表于 2011-8-11 08:25 | 显示全部楼层
密密麻麻的,看来还真是繁琐,太谢谢楼主了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-11 14:42 | 显示全部楼层

回复

本帖最后由 lbc_94 于 2012-2-21 16:57 编辑

下载附件(附件在豆丁网下载,文件名《道路标高计算2》),照的做完之后就发现他的好处了,EXCEL功能很强大。

TA的精华主题

TA的得分主题

发表于 2011-9-26 10:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-9-26 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件在哪里

TA的精华主题

TA的得分主题

发表于 2011-12-21 18:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-27 01:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
怎么没看到物件

TA的精华主题

TA的得分主题

发表于 2011-12-27 10:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
暂时看不懂,围观一下~~~~

TA的精华主题

TA的得分主题

发表于 2012-1-31 08:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-11 01:06 , Processed in 0.038597 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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