用惯了之后你就会喜欢的indirect函数

indirect是一个间接引用函数,返回由文本字符串指定的引用。

-01-

函数说明

indirect函数的写法如下

ref_text:必须有。对单元格的引用,此单元格包含 A1 样式的引用、R1C1 样式的引用、定义为引用的名称或对作为文本字符串的单元格的引用。如果 ref_text 不是合法的单元格引用,则 INDIRECT 返回错误值。

  • 如果 ref_text 是对另一个工作簿的引用(外部引用),则被引用的工作簿必须已打开。如果源工作簿没有打开,则 INDIRECT 返回错误值 #REF!。

a1:可选。一个逻辑值,用于指定包含在单元格 ref_text 中的引用的类型。

  • 如果 a1 为 TRUE 或省略,ref_text 被解释为 A1-样式的引用。

  • 如果 a1 为 FALSE,则将 ref_text 解释为 R1C1 样式的引用。

这里有个技巧,在一个函数中,如果它的某个参数是[]括起来的,代表是可选,也就是可写或可以不写。

-02-

示例解释

如下图所示,在D1单元格中输入公式,结果返回A1单元格的值。是什么意思呢?公式中是引用B1单元格,在B1单元格中包含a1的引用,返回a1单元格的内容。

可以在公式中选中B1,然后按F9查看,如下2图。indirect实际上是引用文本型的单元格地址a1,然后返回它的值。你也可以直接在D1单元格输入公式=INDIRECT("a1"),就返回a1单元格的内容,这时把B1单元格的内容删除也不影响了。

在D1单元格中输入公式=INDIRECT("a1:b1"),公式中直接写的文本型字符串单元格引用,结果显示为错误值,实际上是返回a1和b1单元格的内容,是一个数组,按F9就显示出来。

你也可以在C1单元格中输入a1:b1,然后在D1单元格中写如下公式,结果是一样的。如果在indirect中你想用单元格引用,那么此单元格中必须有另一个引用;或者你直接写入文本型字符串的单元格引用。

如果想用r1c1的样式返回a1单元格的内容,公式为D1=INDIRECT("r1c1",),此时第二参数为false或0,或者留出位置不写内容。其实,indirect最后返回的内容是看第一参数中""里边的引用。

-03-

具体应用

1.单列变成多行多列

要把A列的数据转为右边所示,可以用indirect这个函数实现。

首先需要把A列中对应的单元格地址放到右边中,如下图所示。有了下表的单元格地址,用indirect就可以实现了。

现在的问题是如何实现右表的单元格地址。先把A去掉只看数字。在G9中输入公式=COLUMN(D1),向右填充出现下图红框数据。在J9中输入公式=ROW(A1)*3-3,向下填充出现0 ,3,6。

然后将2个公式相加,在G9单元格中输入公式=COLUMN(D1)+ROW(A1)*3-3,向下向右填充,出现下图。再在公式前面连接a,就出现了单元格地址。

最后,在C13单元格中输入公式=INDIRECT("a"&COLUMN(D1)+ROW(A1)*3-3),向右向下填充,完成。

好了,indirect这个函数你学会了吗?它还有更强大的功能, 比如跨表引用,还可以形成多维引用,以后慢慢说。

(0)

相关推荐