EXCEL和工程施工中工程量统计的完美结合.docx
《EXCEL和工程施工中工程量统计的完美结合.docx》由会员分享,可在线阅读,更多相关《EXCEL和工程施工中工程量统计的完美结合.docx(15页珍藏版)》请在冰豆网上搜索。
EXCEL和工程施工中工程量统计的完美结合
[转]终于研究出来这个了,EXCEL和工程施工中工程量统计的完美结合!
!
特此和大家分享下!
!
!
[图片]
老实讲我是个贪玩儿的人,为了有效的压缩自己的工作时间,有的时候经常琢磨一些既可以偷懒又可以提高效率的方法,这也是我做这个东西的前提条件吧。
最近适逢项目过程审计和项目临近收尾,由于我本来负责的计量、变更随着工程进度,相对工作强度没有以前那么大了,所以部门决定由我来配合物资部本核算、盘点各种施工主材与地才的设计量,说实话翻坝项目的施工特点的特殊性和复杂性,虽然我毕业没有几年,但是绝对是我经历过的所有项目中最复杂的一个项目,不仅仅项目构造物几乎包括了现在路、桥、隧项目所有的结构形式,而且从经营的角度来说也是很复杂,特别业主压缩工期的现象特别严重、前期征地协调浪费了大量的时间,后期为了压缩工期,项目大量引进了一些小的施工队,桥梁基础施工这个想象更为严重,比如,有些桩基,刚开始人工挖桩,挖不动了,换队伍进行冲孔桩施工,钢筋笼绑扎一个队伍,浇筑又是一个队伍。
一根桩经常四五个队伍施工,加之变更又很多,这就无形当中增加了统计工作的工作量,也增加出错的几率。
很早就知道EXCEL很强大的统计功能,但是一直找不到合适的方法,我时常在想有没有一种办法通过四五个函数,或者几种计算机语言(当然这种语言不是VB、VF、C++,一定是要EXCEL可以识别的了的)将这种统计工作的强度降下去,也将这种出错的风险规避开(施工预算,大家都知道经常因为工程量统计出错,结算的时候出现超结算的想象,本人就有一次刻骨铭心的经历,大笔一挥,二十万就超结出去了,还好是过程中结算,有的补救的办法,但还是被前任经历骂了个狗血淋头)经过本人痛苦的冥思苦想,还有恶补了下EXCLE里的函数语言运用方式,琢磨出来一个很不错的东西,在此与大家分享下:
首先,为了方便大家理解,请大家先静下心来跟我先来一起温习下几个函数语句和必要的逻辑关系;
1. 求和:
Sum()这个函数大家估计都会用,不多讲了^_^。
2. 条件判定:
If()这个函数可能大家以前用的少,他的具体在EXCEL中的语句表达为if(条件A,b,c)意思就是如果条件A成立,则返回值为b,否则返回值为c;因为我们很多上学的时候学的是VB,下面我就用VB中的语言表达一下这个意思:
If条件A=TRUE,printb;
Else;
printc
这么说可能大家理解的方便点,最简单的一个条件判断句。
3. 多重条件判断:
这个是个计算机判断语句,可能比较复杂点,也是处理好这组函数的核心,先放下EXCEL的识别语句放下不说,我先从例子开始讲起,帮助大家回忆以前老师讲过的一些东西。
假设有三个条件,条件A、条件B、条件C;三个条件分别单独成立的函数可以表达为(还是VB的语句)
条件A=TRUE;
条件B=TRUE;
条件C=TRUE;
反则,三个条件分别单独不成立
条件A=FALSE;
条件B=FALSE;
条件C=FALSE;
假如需要三个条件同事成立或者同时不成立的话则需要用AND逻辑语句连接三个,哪么在EXCLE中可以完成这个逻辑关系的语句则是“*”号;如果记忆不方便的话,大家可以这么记忆,众所周知,TRUE的计算机默认返回值为不为0的正整数,一般为1,FALSE的计算机默认返回值为0;如果三个条件中有任何一个不成立的话,也就是TRUE*TRUE*FALSE=1*1*0结果同样也会等于0,自然也就是说条件判断的结果是FALSE;
假如需要三个条件只要有其中之一成立,哪么判定结果就是成立的话,VB中这种逻辑语句我们用OR表是,EXCLE中,我们用“+”号表是;也就是TRUE+FALSE+FALSE=1+0+0=1,自然也就是说判断结果为TURE;
最后我们还要进行两个概念的区别:
算术运算和数组运算的区别,数组运算和矩阵运算的区别;
算术运算也就是我们说的加减乘除;
数组运算也就是计算机中的计算方式,也就是一组数据有序的进行计算;
矩阵运算也就两个矩阵之间的加减乘除,这个我们上大学的时候线性代数中讲的很详细了,想必准备过考研的同学都痛苦的挣扎过,这里也不再多说;
EXCLE可以直接进行算术运算和数组运算,但是不能直接进行矩阵运算,关于矩阵的运算我也就只会通过编辑公式来运算了,快捷的方法还不会,这个先不说;说一下EXCLE中数组运算的方法,具体为Ctrl+Shift+Enter,这个时候EXCEL会自动进行数组运算,最简单的是假如你要是用两组数组直接进行加减乘除,编辑完公式直接按Enter的话,现实结果会是#VALSE!
,如果按Ctrl+Shift+Enter的话,他会在正确位置现实正确结果。
举个例子
A1:
B2为一组数组D1:
E2为一组数组
两组数组相乘必然会得出一组数组,G1就是两组数组相乘中对应位置的乘机
如果直接按Enter会显示
如果按Ctrl+Shift+Enter的话会显示
然后依次将公式依次拉到G2、H1、H2就会正确现实两组数组运算的各个位置的各个元素:
为了编辑函数简单,EXCLE也有将单个数组随意定义,随意命名,具体方法为:
选定要定义的数组—插入—名称—定义。
例如我要将下表中D6:
D26定义,首先选中D6:
D26
然后按照插入—名称—定义的顺序打开打开定义数组的窗口
在当前工作簿中的名称里输入要定义的数组名称,如
“桩基长度”就是我为Sheet1!
$D$6:
$D$26这组数组定义的名称,以后写程序的时候就可以直接引用了。
好了,准备工作完成了,我就以一个实例做一个简单的统计工具,为了现实方便,我仅仅以我们标段中的一个桥梁的桩基做为例子,希望大家可以得到启发,做出适合自己的统计工具。
当然我为了对各种复杂的情况都包含进去,再分包队与完成系数上做了一顶的处理,尽可能的让其复杂化!
首先我把表格贴上你们应该很容易看懂是什么意思了
图片有点小,我放大一下,具体这个标有两部分组成,一部分为工程量,一部分为分包情况以及完成情况(完成系数,我们用施工形象进度的算法来确定这个系数,如已经完成系数为1,未施工系数为0,正在施工我们可以根据形象进度的算法把系数折合成0-1之间的一个数字)
两个表放大为
上述表格以下简称表一;
上述表格以下简称表二;
我们最终要统计成一个这种表格的形式
上述表格我们以下简称表三
准备工作完成,现在开始编写程序:
第一步:
将以后可能用到的数组定义
我们分别将表一、表二中的D、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V列分别定义为:
桩长、钢筋10、钢筋16、钢筋20、钢筋22、钢筋25、钢筋28、混凝土30、挖孔1名称、挖孔1系数、挖孔2名称、挖孔2系数、绑钢筋1名称、绑钢筋1系数、绑钢筋2名称、绑钢筋2系数、浇注名称、浇注系数(这里浇注的筑为错别字,懒得改了,就这么了,知道就可以了)
第二步:
在表三中编写程序:
1. 已完工工程数量的函数编写:
在Z7中编写公式:
“=SUM(IF((挖孔1名称=$X7),挖孔1系数*桩长,0))+SUM(IF((挖孔2名称=$X7),挖孔2系数*桩长,0))”
我解释下这个公式的意思
我们来分析下,每个队伍的完成系数数里有他们完成的系数,也就是让他们各自系数乘以每个桩桩长的设计量,然后求和就是了,我们要做的就是用函数的形式让他自己对号入座、
首先将这个函数拆成两个sum()的合集,首先看第一个sun()的函数:
IF((挖孔1名称=$X7),挖孔1系数*桩长,0),这个理解为如果“挖孔1名称”这个数组里的元素=X7中的元素即“王骏”时显示“挖孔1系数×桩长”,否则显示“0”。
(PS:
这里查一句题外话,我这里以用“$X7”是我要做一个相对引用,目的很简单,我是为了方便一下的公式可以直接复制粘贴,如果你还不能掌握相对引用或者绝对引用,你可以直接键入X7,结果和$X7的效果一样,只不过一下的每一个公式你就需要去调整X7,因为下面还有伍宝生、李国权、等等这些施工队名称)
这个时候“挖孔1系数×桩长”因为这两组数组的乘积形成一个新的数组,将这个数组求和就是sum()要做的,有了首选队伍了的完成量了,哪么因为首选队伍因为其他的原因没有完成施工任务,就需要第二只队伍进行施工了,这个也就是第二个sum()里的意思,两个sum()的和,则为王骏已经完成的挖孔桩的工程数量;
2. 未完成工工程数量的函数编写:
再Z8中键入“=SUM(IF((挖孔1名称=$X7)*((挖孔1系数+挖孔2系数)<>1)*(挖孔2系数=0),1,0)*(1-挖孔1系数)*桩长)+SUM(IF((挖孔2名称=$X7)*((挖孔1系数+挖孔2系数)<>1)*(挖孔2系数<>0),1,0)*(1-挖孔1系数-挖孔2系数)*桩长)”
我解释下这个公式的意思
比统计已完成工程数量难一点的是未完成的数量时可能遇见三种情况
第一这根桩虽然还没施工完毕,但是没有换过队伍
第二这根桩由于种种原因第一只队伍做不下去了,换第二只队伍去做,但是第二只队伍还没有将这根桩挖完
怎么样让计算机懂得我们这个意思就成了解决这个问题的核心
这个函数难点有两个:
第一个sum()中“IF((挖孔1名称=$X7)*((挖孔1系数+挖孔2系数)<>1)*(挖孔2系数=0),1,0)”,
第二个sum()中IF((挖孔2名称=$X7)*((挖孔1系数+挖孔2系数)<>1)*(挖孔2系数<>0),1,0),
其实“(挖孔1名称=$X7)”“((挖孔1系数+挖孔2系数)<>1)”“(挖孔2系数=0),1,0)”“(挖孔2系数<>0),1,0)”为四个条件;
每一个条件翻译出我们的语言就是:
条件A:
(挖孔1名称=$X7),“挖孔1名称”数组中的每一个元素和X7,也就是“王骏”相等,就是让他得对号入座;
条件B:
((挖孔1系数+挖孔2系数)<>1),“挖孔1系数”与“挖孔2系数”的和不等于1,也就是说明这根桩还没施工完毕;
条件C:
(挖孔2系数=0),“挖孔2系数”等于0,也就是说这根桩还没有换过队伍,至始至终都是由第一个队伍在施工;
条件D:
(挖孔2系数<>0),1,0),“挖孔2系数”不等于0,也就是这根桩已经换过队伍,第一个队伍已经施工完毕,这个时候由第二支队伍完成剩余的工程量;
仔细想下,如果条件A,条件B,条件C同时成立,那么第一只队伍未施工的工程量已经全部统计完毕,如果条件A,条件B,条件D同时成立,那么第二只队伍未施工的工程量已经全部统计完毕,两个的合计就是所有未完成工程数量。
这里提醒下大家,这里很容易反的两种错误:
一这根桩已经完全施工完毕,但因为两支队伍只做了其中的一部分,因为考虑条件不完全比如说漏掉了条件B,这样就会造成这类桩基的工程数量会计算两遍
二这根桩还未施工完毕时,一旦换了施工队,实际上这个时候第一支队伍对于这根桩来说已经不存在剩余工程量了,只有第二根装会有剩余工程量,如果漏掉了条件C、条件D容易造成这根桩第一只队伍的工程数量重复计算。
最特殊的例子就是右幅4-1,4-2这两根桩,伍宝生分别只做了0.1的工程量,龚尚雄做了0.4的工程量,证明伍宝生施工已经停止了,但因为两个系数的合计才只有0.5也就是说龚尚雄需要做剩下的0.5的系数工程量,而伍宝生的剩余工程数量是0;
剩下的工作也就是复制粘贴,或是将函数中部分数组做替换就行了。
最后合计下,看下表三的合计数量是不是和表一的合计数量一样。
如果一样,恭喜你已经和我一样NB了。
哈哈!
不过个人觉得这么做出来,也就是一劳永逸,而且可以将人为统计造成的误差降低到最低,只需要前期对工程数量做一个系统的录入工作,如果平时发生变更,便需要对原来的基础数据进行维护!
施工过程中、或是盘点时只需要对完成系数进行修改哪么很简单,工程量会瞬间自动生成!
再也不需要浪费大量的精力和时间去做重复过很多次的计算!
劳民伤财啊~~!
!
个人建议:
第一,做这些一定要思路清晰,有些条件可能很不容易被发现,但是一定要考虑周全,建议做之前,你将你要注意的条件先写下来,以便你做的构成中落下,程序一旦写好,运行不出来,或是不能正确的显示结果,反过来改程序个人觉得是比较头疼的事情;
第二,人懒没什么,可怕的是脑子也懒;只有懒人才会去想偷懒的办法,但是不代表所有懒人都会去想!
我之前一直承认EXCLE很强大,但是一直局限在最最初级的阶段,原因是我自己一直没有去思考,去研究,终于被逼的头大的时候,不得不定下心来去研究,结果总是好的。
这是工程上,经营这块儿遇到的最好的一个例子吧,也许在其他行业的兄弟姐妹也有类似的例子,但是只需要你们稍微将其演化过去,一定可以节约很多时间,避免大量的重复计算。
好了,不少了,相信如果你可以真正的看到这里,每一句都看透的话,我相信你一定会有收获的!
注:
本帖严禁转载,违者必究!
本人只是想与兄弟们或者同事们分享,夸张点多少也有点知识产权的味道吧!
哈哈,评职称也是骗不错的论文!
!
如果遇到不太清楚的,打电话,或者Q我都可以,我愿意和大家分享,另外需要我提供中例子中的EXCLE电子版,Q我!
∙