现在的位置: 首页 > 综合 > 正文

Excel 输入公式时如何让函数知道自己所在单元格的引用

2013年10月08日 ⁄ 综合 ⁄ 共 1380字 ⁄ 字号 评论关闭

在回过网友的一个帖子后,觉得标题所述的问题在实际应用中虽然不具有普遍性,但作为Excel 的一种技巧值得记录一笔。

让我们假设这样一类情况:我们希望我们输入的公式处理的数据区域能根据我们公式输入的地方进行改变,而这个改变公式本身就能够得知,不需要人工去修改函数的参数。或者说,我们设计的公式的写法保持不变,我们把它复制到什么地方,它处理的数据就根据它所在的位置相应发生变化。

让我们看一个具体的例子:

  A B C D
1 45   86  
2 63 97 34  
3 101 56 79 234
4   123        64
5       82

A1:A3,B2:B4,C1:C3 和 D3:D5 各是一组数据,由三个垂直相邻的单元格组成,现在我们要计算每一组数据的总和。这个任务用SUM 函数就可以完成,在A4 输入 =SUM(A1:A3),计算A1:A3 的总和。由于Excel 具有智能完成公式的能力,我们把A4 复制到B5,C4 和D6 后,公式里函数的参数会相应发生变化,变成 =SUM(B2:B4),=SUM(C1:C3) 等等。我们并不需要手工去修改函数的参数,Excel 自动帮我们完成了这个任务——公式放置的单元格变了,参数的范围也变了。这也就是为什么我在开篇说我们刻意去追求一个技巧没有必要,不具有普遍性。

Excel 每张工作表上的单元格总数都是固定的(65536x256),单元格引用的表达方式就像坐标轴的x 轴和y 轴,我们在写公式的时候总是能知道参数的单元格引用是什么。但是换个角度思考,我的题目现在是——我也不知道我的第一个公式会在哪里输入,但是不管在哪里输入,公式的目标是对公式所在单元格上面紧邻的三个连续单元格里的数据求总和。Excel 的智能是要有起点的,现在我们不提供这个起点了,怎么样让公式自己知道要计算的数据区域?

首先,公式能不能知道自己所在单元格的坐标?Excel 提供的 ROW 函数在省略参数时,返回的是ROW 函数出现的单元格所处的行数;同理,COLUMN 函数在省略参数时,返回的是COLUMN 函数出现的单元格所处的列数。这两个函数真是宝贝,我们只要问它们,“ROW,ROW 我在哪一行?”,“COLUMN,COLUMN 我在哪一列?”,它们就会告诉你你所处的位置。有了这两个函数,我们问题的解决已经有了思路。

不过,COLUMN 函数返回的是一个数字,我们有必要把它转换成A、B、C、D 这样的列名。CHAR 函数可以把字符集里的代码转换成字符,大写字母A 对应的代码是65。那么公式所在单元格的列名就是 CHAR(COLUMN( )+64)。把列名和行数字连在一起组成了A1 引用表示法,CHAR(COLUMN( )+ 64)&ROW( )

到这一步,我们得到的是一个字符串表示的单元格引用。从文本意义上来说代表单元格,但Excel 函数可不会当它是单元格引用,只会当它是字符串,所以我们还需要 INDIRECT 这个函数来把这个字符串转换成单元格引用,就是 INDIRECT(CHAR(COLUMN( )+ 64)&ROW( ))

回到我们求和的这个题目,我们既然求出了公式所在单元格的引用,求公式所在单元格上面相隔固定位置的单元格引用也就很简单了。我们最终得到的这个公式就是——

=SUM(INDIRECT(CHAR(COLUMN()+64)&(ROW()-3)):INDIRECT(CHAR(COLUMN()+64)&(ROW()-1)))

抱歉!评论已关闭.