摘要:本文分析了目前所用工程算量方法中存在的问题,介绍了一种既高效准确又便于对账的EXCEL算量软件,包括其技术要点及部分源程序等。 关键词:工程算量 附注分离 自动计算 EXCEL VBA 工程量计算是工程造g的基础,也是造价工作者最为费神的。随着工程量清单计价的全面推行,工程量计算规则将更为细致复杂。所以提高工程算量的工作效率,成了每个造价工作者的美好愿望。 一、常见工程算量方式的介绍 到目前为至,常见的工程算量方式主要有手工算量法、专业软件算量法、传统的EXCEL算量法等。手工算量法相对于另两种方式而言,其计算过程清楚便于对账,但最大的弊端是费时又易出错。专业软件算量法由于少了列式计算的步骤,使不懂造价的人也可方便使用,对于做标底特别方便。但其对细部处理不灵活,价格又高,而且大多只局限于对土建进行算量,对账也不方便。传统的EXCEL算量法,相对于手工算量法准确程度和工作效率大大提高了,但工作量仍较大,对账功能也不及手工算量方便。 表1 工程量计算稿 二、EXCEL算量法的介绍 由于工程算量必须要进行相关各方的多次核对,所以对账功能与高效准确同样重要。本文介绍的算量方式在传统的EXCEL算量法的基础上作了较大的改进,通过增加附注使其具备手工算量的对账优点,同时也比传统的EXCEL算量法更为快捷。该软件的整体工作思路与手工算量法基本一致。 在“工程量计算稿”上的计算式输入(或修改)完成后,计算机通过预设的VBA程序计算出工程量并保存在相应的“工程量”单元格中(如表1)。当全部工程量计算完成后, 单击“工程量汇总” 表左上方的“工程量汇总”命令按钮,计算机按照预设的VBA程序对“工程量计算稿”表中的工程量按清单项目号进行汇总并排序(如表2)。通过以上两大功能确保了EXCEL算量软件的高效准确性。 表2 工程量汇总表 三、软件设计中的技术要点剖析 要实现以上功能必须解决好以下几个技术要点:附注的分离及表达式自动计算,工程量按“项目编号” 汇总及排序。 1、附注的分离及表达式自动计算 在计算式中添加附注是本软件的一大特色,可以方便我们对账。但我们知道EXCEL只能对数字进行运算,于是必须对计算式中的附注进行分离。如表1所示,我们将附注均写在“[ ]”内,于是问题便转化为对“[ ]”中的内容进行分离。当计算式输入(或修改)完成后,VBA程序即对表达式中的字符进行逐一识别,将非“[ ]”中的内容通过函数(1)逐一添加到中间变量Q中。 Q=Q&Mid(X,I,1) (1) 式中: X为计算式,函数Mid(X,I,1)为提取X中的第I个字符。 同时我们知道EXCLE只对“=”开始的数学表达式进行运算,而无法对分离出来的表达式无法进行,于是我们引入了函数(2)。 FL=Application Evaluate (“(” & Q & ”)”) (2) 式中:FL为表达式的计算结果,函数Evaluate()为取值函数。 自动计算是是本软件的又一特色,一般的EXCEL算量法都要通过对“计算式”后的单元格逐一引用函数,这样做既增加操作时间又容易忘记。为此预设的VBA程序,在“计算式”中的内容一旦发生变化即自动执行附注分离与表达式取值的过程。 其自动计算的源程序如下: ‘************************************************************************ Private Sub Worksheet_Change(ByVal Target As Range) X = Target.Row y = Target.Column Application.EnableEvents = False If y = 3 Then Range("d" & X) = FL(Range("c" & X)) End If Application.EnableEvents = True End Sub ‘*********************************************************************** 2、工程量按“项目编号” 汇总及排序 工程量按“项目编号” 汇总及排序是本软件的另一特色。“工程量计算稿”是按分部分项工程计算的,工程量计算完成后我们要把相同类进行汇总。根据《建设工程工程量清单计价规范》,相同的项目具有相同的项目编号,这就为工程量汇总带来了便利。 在汇总时对“工程量计算稿”中的“项目编号”在“工程量汇总表”中进行搜索看是否出现过。若未出现过则将相关参数依次输入第一个空白行中,并将对应的分部分项名称作为附注(套上“[ ]”后)添加在“汇总式”的最后一个数字后。若已出现过则仅将“+”及分部分项的工程量、对应的分部分项名称(注套上“[ ]”后)添加在相应的单元格后,如表2所示。汇总后按项目编号对所有参数进行重新排序。而实际上以上步骤是一气呵成的。 其源程序如下: ‘********************************************************************************************** With Worksheets("工程量计算稿") nRow = .Range("a65536").End(xlUp).Row For i = 3 To nRow If Len(.Range("c" & i)) = 0 Then cCeng = "[" & .Range("a" & i) & "]" Else cXiang = .Range("a" & i) Set c = Worksheets("工程量汇总表").Range("a:a").Find(cXiang, LookIn:=xlValues) If c Is Nothing Then Set c = Worksheets("工程量汇总表").Range("a65536").End(xlUp).Offset(1, 0) c.Value = cXiang c.Offset(0, 1) = .Range("b" & i) c.Offset(0, 2) = .Range("d" & i) & cCeng c.Offset(0, 4) = .Range("e" & i) Else c.Offset(0, 2) = c.Offset(0, 2) & "+" & .Range("d" & i) & cCeng End If c.Offset(0, 3) = c.Offset(0, 3) + .Range("d" & i) End If Next End With ‘注:以上程序的作用为将“工程量计算稿”中相同项目编号的工程量在“工程量汇总表”进行中汇总 Worksheets("工程量汇总").Range("b3:e65536").Sort _ Key1:=Worksheets("工程量汇总").Range("b3")程量汇总").Range("A3") ‘注:以上程序的作用为将汇总后的结果按清单编号进行排序 ‘********************************************************************************************** 四、尾声 用VBA开发的EXCEL算量软件,经实践证明能较好的解决目前工程算量中存在的问题,是造价者不可多得的算量工具。该软件不仅适用于清单计价模式下的工程量计算,也适用于定额计价模式下的工程量计算。同时还可通过与其他套价软件(或定额库)衔接在工程量汇总后直接进行计价。希望本文起起到抛砖引玉的作用,不足之处请不吝指正。 参考文献: [1]中华人民共和国建筑部. 建设工程工程量清单计价规范. 北京. 中国计划出版社.2003 [2] 建设部标准定额研究所.《建设工程工程量清单计价规范》宣贯教材.北京. 中国计划出版社.2003 [3] Bill Jelen,Tracy syrstad著.王军,等译.巧学巧用EXCEL 2003 VBA与宏(中文版).北京:电子工业出版社,2005 [4]求是科技.编著.Visual Basic 房产建筑应用系统开发实例导航.北京.人民邮电出版社.2004