一般情况下,我们都采用EXCEL编写表格,因为EXCEL具有容易计算、公式简单清晰、编排方便等特点。如果要在WORD文档中插入表格,从EXCEL中复制表格到WORD是一个办法,可是复制过来的表格会被转换为文字,原有的公式特性不复存在,而且直接粘贴的EXCEL表格还面临表格样式、文字格式等需要调整的麻烦,因此,对一些较简单的计算表格,不如直接在WORD中编写更为容易。
一、利用域在Word中实现计算功能
转载自:http://www.yanr.cn/Feature/Word/word/18.html#1
1.计算表格行或列
(1)计算表格行
假如需要计算表格行数据的平均值,如果存放计算结果的空白单元格在数据行的右边,可以把光标插入紧靠数据右端的空白单元格。按下Ctrl+F9组合键把域特征字符“{}”插入单元格,然后在大括号中间输入“=Average(left)”,完成后按下F9键更新,即可获得计算结果。
如果存放计算结果的空白单元格位于数据行的左边,只须按上述方法在紧靠数据左边的单元格中插入公式“=Average(right)”即可。
(2)计算表格列
计算表格列的方法和计算表格行非常相似,如果我们要计算某列中所有数据的平均值,而存放计算结果的空白单元格位于数据上面。只要按上述方法在其中插入公式“=Average(above)”,然后更新即可获得结果。如果存放计算结果的空白单元格位于数据下面,只要把公式修改为“=Average(below)”即可。
如果需要执行的计算是求和、寻找最大值、最小值等,只要把上述公式(域代码)中的函数名称改为Sum、Max和Min等即可。如果所计算的行或列中含有英文字母和汉字,则计算中均把它们当作“0”处理。
2.计算任意单元格
假如计算对象不是存放在连续的数据行或列中,我们可以把表格看成一个Excel表格,也就是表格左边第一列是A列、第二列是B列……,表格自上而下分别是第1行、第2行……。再按照类似Excel的公式构造原则进行计算,下面以Sum函数和If函数为例进行介绍。
(1)对任意单元格求和
假设表格第一行左起第一至三单元格(即A1、B1、C1)存放着“36 580”、“18 580”和“26 980”,第二行第三个单元格(即C3)存放着“52 360”,第四行第五个单元格(即E4)存放着“36 190”。你只需在存放计算结果的单元格中输入“{=Sum(A1:C1,D2,E4)}”,更新域后即可获得计算结果。如果被计算的数据发生了变化,只要对域进行更新就可以获得正确的结果。
(2)If函数的判断求和
表格的第一列(A)存放着“姓名”,第二列(B)存放着“岗位工资”的数值,第三列(C)存放着“技能工资”的数值。假如“岗位工资”高于1 800元的员工需要额外加上200元的补贴,可以在第四列的空白单元格中输入“{=If(B2>1800,Sum(B2:C2,200),Sum(B2:C2))}”。该公式经过更新以后,若B2、B3等单元格中的数值大于1 800,则执行“Sum(B2:C2,200)”,也就是将B2、C2中的数值和200相加;若B2、B3等单元格中的数值小于1 800,则执行“Sum(B2:C2)”,也就是将B2、C2中的数值相加。
注意:除上面介绍的方法在单元格中插入公式(域代码)以外,还可以单击“表格→公式”菜单命令,在出现的对话框中进行设置;或者打开“域”对话框选中“域名”下的“Formula”项,再单击“公式”按钮,都可以打开“公式”对话框插入所需的公式。
1.计算表格行或列
(1)计算表格行
假如需要计算表格行数据的平均值,如果存放计算结果的空白单元格在数据行的右边,可以把光标插入紧靠数据右端的空白单元格。按下Ctrl+F9组合键把域特征字符“{}”插入单元格,然后在大括号中间输入“=Average(left)”,完成后按下F9键更新,即可获得计算结果。
如果存放计算结果的空白单元格位于数据行的左边,只须按上述方法在紧靠数据左边的单元格中插入公式“=Average(right)”即可。
(2)计算表格列
计算表格列的方法和计算表格行非常相似,如果我们要计算某列中所有数据的平均值,而存放计算结果的空白单元格位于数据上面。只要按上述方法在其中插入公式“=Average(above)”,然后更新即可获得结果。如果存放计算结果的空白单元格位于数据下面,只要把公式修改为“=Average(below)”即可。
如果需要执行的计算是求和、寻找最大值、最小值等,只要把上述公式(域代码)中的函数名称改为Sum、Max和Min等即可。如果所计算的行或列中含有英文字母和汉字,则计算中均把它们当作“0”处理。
2.计算任意单元格
假如计算对象不是存放在连续的数据行或列中,我们可以把表格看成一个Excel表格,也就是表格左边第一列是A列、第二列是B列……,表格自上而下分别是第1行、第2行……。再按照类似Excel的公式构造原则进行计算,下面以Sum函数和If函数为例进行介绍。
(1)对任意单元格求和
假设表格第一行左起第一至三单元格(即A1、B1、C1)存放着“36 580”、“18 580”和“26 980”,第二行第三个单元格(即C3)存放着“52 360”,第四行第五个单元格(即E4)存放着“36 190”。你只需在存放计算结果的单元格中输入“{=Sum(A1:C1,D2,E4)}”,更新域后即可获得计算结果。如果被计算的数据发生了变化,只要对域进行更新就可以获得正确的结果。
(2)If函数的判断求和
表格的第一列(A)存放着“姓名”,第二列(B)存放着“岗位工资”的数值,第三列(C)存放着“技能工资”的数值。假如“岗位工资”高于1 800元的员工需要额外加上200元的补贴,可以在第四列的空白单元格中输入“{=If(B2>1800,Sum(B2:C2,200),Sum(B2:C2))}”。该公式经过更新以后,若B2、B3等单元格中的数值大于1 800,则执行“Sum(B2:C2,200)”,也就是将B2、C2中的数值和200相加;若B2、B3等单元格中的数值小于1 800,则执行“Sum(B2:C2)”,也就是将B2、C2中的数值相加。
注意:除上面介绍的方法在单元格中插入公式(域代码)以外,还可以单击“表格→公式”菜单命令,在出现的对话框中进行设置;或者打开“域”对话框选中“域名”下的“Formula”项,再单击“公式”按钮,都可以打开“公式”对话框插入所需的公式。
二、实例
如下表所示,表中蓝色数据表示填入的数据,数据填入后要在合计和总计中进行价格计算。
单价是在B列,数量在C列,则第一个合计单元格的计算公式为B2×C2。将光标放至第一个合计单元格中,点击“插入”菜单>>“域”,在域对话框中点击“公式”,在“公式”对话框中输入“=B2*C2”,然后按确定按钮。
插入域后的结果如下表所示:
第二个合计单元格的计算公式为“=B3*C3”;总计单元格的计算公式为“=SUM(D1:D2)”。 最后效果如下表所示。
单价是在B列,数量在C列,则第一个合计单元格的计算公式为B2×C2。将光标放至第一个合计单元格中,点击“插入”菜单>>“域”,在域对话框中点击“公式”,在“公式”对话框中输入“=B2*C2”,然后按确定按钮。
插入域后的结果如下表所示:
第二个合计单元格的计算公式为“=B3*C3”;总计单元格的计算公式为“=SUM(D1:D2)”。 最后效果如下表所示。
三、自动更新
表格编完了,但是还有一个问题:WORD不能象EXCEL那样自动进行域更新,手动更新的话要点中域,然后按F9键一个一个更新,这样非常麻烦。而且如果有哪个数据忘了更新,结果就会出错。看来,还得编个自动更新的代码。
自动更新代码(1):每次打开文档时自动更新所有域;或者在文档编辑过程中运行该宏也能自动更新。
自动更新代码(1):每次打开文档时自动更新所有域;或者在文档编辑过程中运行该宏也能自动更新。
转载自:http://blog.hanguofeng.com/read.php 444
Sub AutoOpen()
Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
End Sub
每分钟自动更新一次的代码(2):每隔1分钟自动更新一次。
Sub AutoOpen()
Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
End Sub
每分钟自动更新一次的代码(2):每隔1分钟自动更新一次。
转载自:http://redwin.bokee.com/37531.html
Dim pTime As Date
Sub Runtimer()
pTime = Now + TimeValue("00:01:00")
Application.OnTime pTime, "AutoUpdate"
End Sub
Dim pTime As Date
Sub Runtimer()
pTime = Now + TimeValue("00:01:00")
Application.OnTime pTime, "AutoUpdate"
End Sub
Sub AutoUpdate()
\'自动更新域公式
\'By redwin 2003-12-29
On Error Resume Next
r = Selection.Information(wdFirstCharacterLineNumber)
With Selection
.WholeStory
.Fields.Update
\'返回至原光标所在位置
.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=r, Name:=""
End With
Runtimer
End Sub
Sub BeforeCloseA()
\'On Error Resume Next
\'Application.OnTime pTime, "AutoUpdate", , False
End Sub
\'自动更新域公式
\'By redwin 2003-12-29
On Error Resume Next
r = Selection.Information(wdFirstCharacterLineNumber)
With Selection
.WholeStory
.Fields.Update
\'返回至原光标所在位置
.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=r, Name:=""
End With
Runtimer
End Sub
Sub BeforeCloseA()
\'On Error Resume Next
\'Application.OnTime pTime, "AutoUpdate", , False
End Sub
两种代码各有优点。代码(1)的优点是想更新时就更新;代码(2)的优点是不用管它,它会不断的更新,缺点是每次更新时文档都会刷的闪一下。所以我比较喜欢代码(1)。
四、代码的输入与加载
编写完表格后按ALT+F11键,进入MICROSOFT VISUAL BASIC编辑器,按F7键打开代码窗口,在窗口中粘贴或输入代码,然后关闭编辑器。
代码设完后还不算完,WORD为了防止宏病毒,会禁止宏运行。点击“工具”菜单>>“宏”>>“安全性”,把安全性设为中,然后把“可靠发行商”的“信任所有安装的加载项和模版”选中,保存文件,再次打开的时候就会提示你是否启动宏。不建议把安全性设为低,安全第一。
这样,每当重新打开文档时,域就会自动更新。如果使用代码(2),则会每分钟自动更新一次。如果使用代码(1),当你需要把所有域自动更新时,按ALT+F8键,选择AUTOOPEN并点击运行,则域进行更新。