ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 经验技巧大放送之——用域实现Word表格的相对引用和自动计算

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-3-5 13:11 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在Word中的表格中,可以用域公式实现求和、求均值等简单的计算,但域公式有两个不足之处,一是书写麻烦,二是不能象Excel一样实现相对引用。对于大量的表格计算,常规的做法是先写一个公式,然后复制到其他单元格,最后再逐个修改。这样做不仅繁琐,而且容易出错。如何才能在Word中实现域公式的相对引用,做到一个公式“通吃”表格计算呢?方法有两种,一种是利用top、bottom、left和right这四个关键词,比如{=sum(left)} 、{=average(top)}这样的域公式,书写完成后复制到每个单元格就能计算出正确的结果。然而这种方法只能实现整行或整列的相对引用,对类似B2:E2这样的特定区域是无能为力的。还有一个方法也是今天重点介绍的,就是利用seq和quote这两个域的组合,实现自动引用表格的行号、列号,让域公式书写一劳永逸,让Word的表格计算也象Excel一样便捷。下面以两个实例来进行详细说明。
实例1:计算每行特定区域的和。
下表是一个4行5列的表格,要求从第二行开始,计算B列到D列的和(表格的灰色底纹部分),计算结果放在E列。如果E列的单元格用{=sum(left)}这个公式,那么序号也会被计入在内,结果就会出错。常规的方法是在E2单元格写好域公式{=sum(B2:D2)},,然后把公式复制到E3和E4单元格,最后修改行号,把域公式的引用区域B2:D2修改为B3:D3或B4:D4。而使用quote和seq域的组合则可以简化上述繁复的方式,自动实现行号的累加。域公式的表达式如下:
{ ={ quote “sum(B{ ={ seq Col_A }+1 }:D{ ={ seq Col_D}+1})” } }我们首先用 seq域 生成了Col_A和Col_D两组从1开始的序数(Col_A和Col_D可以随意命名),之所以要加1,是因为我们要从第二行开始计算。Quote域引用了一段求和公式的文本。把这个域复制到E列的每一行,它就会自动累计行号,计算正确的结果。域代码见下图
图1.jpg
实例2:计算每列特定区域的均值
下表是一个5行4列的表格,要求在第5行的每一列,求第二行到第四行的均值(表格的灰色底纹部分),计算结果放在第5行。我们同样使用quote和seq域来写一个通用的公式,只不过这次我们要实现列号的自动累加。因为列号是从A开始的字母,所以我们要为seq加个\*alphabetic开关,把数字转化为字母。其表达式如下:
{ ={ quote “average({ seq Row_A \*alphabetic }2:{ seq Row_AA \*alphabetic }4)” } }
图2.jpg
这个公式适用于不超过26列的表格,超过26列的列号,就需要用两个以上的字母表示,这需要用更加复杂的域公式来实现。

[ 本帖最后由 寅鹞 于 2009-3-6 08:38 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-3-7 09:04 | 显示全部楼层

的确比如意版主的公式强

,看了下附件的效果,发现楼主的域公示的确比如意版主总结的那个高级。不过表格中列的计算,相对引用还是有26列的限制啊,如果域能实现 AA AB AC这样的形式,就能打破26列的限制了。

[ 本帖最后由 TeF 于 2009-3-7 09:05 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-5 13:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

沙发自己抢

我个人觉得,我的这个域公式,比如意版主总结的那个要灵活和高级,通用性也更强。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-6 08:38 | 显示全部楼层
Word版真是冷清啊,版主也不来,都写书去了。

TA的精华主题

TA的得分主题

发表于 2009-3-6 17:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-6 17:17 | 显示全部楼层
原帖由 三戒 于 2009-3-6 17:09 发表
请放个附件的例子。

附件放上来了。奥妙自己去领会吧
让Word的表格计算实现象Excel一样的相对引用.rar (178.59 KB, 下载次数: 772)

TA的精华主题

TA的得分主题

发表于 2009-3-6 17:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
向大家学习,我是新手!

TA的精华主题

TA的得分主题

发表于 2009-3-6 20:45 | 显示全部楼层
谢谢寅鹞的热心,正缺乏这方面的知识,有空研究去。

TA的精华主题

TA的得分主题

发表于 2009-3-8 12:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-3-8 18:33 | 显示全部楼层
原帖由 TeF 于 2009-3-7 09:04 发表
不过表格中列的计算,相对引用还是有26列的限制啊,如果域能实现 AA AB AC这样的形式,就能打破26列的限制了。


如下代码可生成这样的列名称,只是觉得其实用性不是很强。
{quote{set n{seq aa}}{set col"{=int((n-1)/26) \*alphabetic}{=if(mod(n,26)=0,26,mod(n,26)) \*alphabetic}"}{col}}

谢谢楼主分享。

[ 本帖最后由 sylun 于 2009-3-8 18:39 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 06:27 , Processed in 0.045734 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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