indirect是Excel唯一可以拥有直接解析字符串引用地址参数能力的函数,是绝无仅有的宝贝疙瘩。
(笔记模板由python脚本于2024年08月21日 12:45:49创建,本篇笔记适合喜欢用Excel处理数据的coder翻阅)
Python 官网:https://www.python.org/
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
indirect是Excel唯一可以拥有直接解析字符串引用地址参数能力的函数。在Excel中,INDIRECT
函数确实是一个非常独特的函数,它允许用户通过文本字符串来引用单元格。INDIRECT
函数的功能是返回文本字符串所指定的引用。这意味着,如果你有一个单元格包含类似"A1"的文本,INDIRECT
可以将这个文本当作实际的单元格引用来处理。
除了INDIRECT
函数之外,Excel中还有ADDRESS
、CELL
两个函数也与单元格地址字符串
有关(前者返回字符串,后者接收字符串参数),但它们的功能和用途与INDIRECT
不同。接下来,就简单介绍它们。
例如
:
ADDRESS
函数:返回一个单元格的地址,该地址是作为文本字符串形式出现的。是把“有效引用地址”点化成字符串的小可爱!CELL
函数:返回有关单元格的信息,包括地址。是“分拣”单元格地址行列整数值的小小神器。GET.CELL
函数:这是一个VBA函数,不是Excel的内置函数,但它可以在VBA中用来获取单元格信息,包括地址。 尽管这些函数可以处理与单元格引用有关的字符串,但它们并不具备INDIRECT
函数的直接引用能力。INDIRECT
函数的独特之处在于它能够将一个文本字符串转换为一个实际的单元格引用,从而可以用来取值或进行计算。
据“前所述”来看,INDIRECT
确实是Excel中唯一专门设计用来通过字符串参数直接处理引用地址的函数。其他函数可能在某些情况下与引用地址的字符串有关联,但它们并不具备INDIRECT
函数的核心功能。
以下是Excel中ADDRESS
、CELL
和GET.CELL
函数的基本语法和使用说明。
ADDRESS
函数返回一个单元格的地址,其语法如下:
ADDRESS(row_number, column_number, [abs_num], [a1], [sheet_text])
row_number
:必需的参数,表示单元格的行号。
column_number
:必需的参数,表示单元格的列号。
[abs_num]
:可选参数,用于指定返回的地址类型。0或省略表示绝对地址,1表示绝对行号和相对列标,2表示相对行号和绝对列标,3表示相对地址。
[a1]
:可选参数,设置为TRUE(或省略)返回A1样式的引用,设置为FALSE返回R1C1样式的引用。
[sheet_text]
:可选参数,表示工作表的名称,用于指定返回的地址中包含工作表名。
示例
:
=ADDRESS(1, 1, 1) // 返回 "$A$1"
=ADDRESS(1, 1, 2) // 返回 "A$1"
=ADDRESS(1, 1, 3) // 返回 "$A1"
=ADDRESS(1, 1, 4) // 返回 "A1"
=ADDRESS(1, 1, 1, TRUE, "Sheet1") // 返回 "Sheet1!$A$1"
CELL
函数返回有关单元格的信息,其语法如下:
CELL(info_type, [reference])
info_type
:必需的参数,表示要返回的信息类型。例如,"address"返回单元格的地址,"row"返回单元格的行号,"col"返回单元格的列号等。
[reference]
:可选参数,指定要返回信息的单元格。如果省略,默认为当前活动单元格。
示例
:
=CELL("address", A1) // 如果A1是活动单元格,返回 "$A$1"
=CELL("row", A1) // 返回 "1"
=CELL("col", A1) // 返回 "1"
GET.CELL
函数是一个VBA函数,不是Excel的内置函数,因此不能直接在单元格公式中使用,它返回有关单元格的信息。也可以换句话说,“get.cell就是cell的vba调用方式”。
其语法如下
:
Call GET.CELL(cell_address, info_type)
cell_address
:必需的参数,表示要获取信息的单元格地址。
info_type
:必需的参数,表示要返回的信息类型,是一个数字代码。
示例
(在VBA中):
Sub GetCellInfo()
Dim rng As Range
Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1")
MsgBox GET.CELL(4, rng) ' 返回单元格A1的列号
End Sub
在这个例子中,GET.CELL(4, rng)
会返回单元格A1的列号。
请注意,GET.CELL
函数需要通过VBA代码来调用,而不是直接在Excel的单元格公式中使用。
能直接引用字符串地址参数的,indirect是绝无仅有的。基于Excel的内置函数库,INDIRECT
函数是唯一一个可以直接将字符串地址转换为实际单元格引用的函数。没有其他内置函数能够像INDIRECT
那样,接受一个代表单元格地址的字符串,并返回对该单元格的引用。
"A1"
,使用 =INDIRECT("A1")
将会返回单元格 A1 中的值。这是其他函数做不到的,因为它们要么返回文本字符串,要么返回有关单元格的描述性信息,而不是单元格的值。 因此,如果我们只考虑Excel的内置函数,那么可以说INDIRECT
是绝无仅有可以直接引用字符串地址参数的函数。
然而,需要注意的是,VBA(Visual Basic for Applications)提供了更灵活的方式来处理这类问题,但这已经超出了Excel内置函数的范畴。
修习 i n d i r e c t indirect indirect太棒了!能够熟练掌握INDIRECT
的用法并联合“连字”符号&
,确实可以让原有的Excel技能提升一个层次,它们是处理动态引用和复杂字符串拼接的强大工具。
如果遇到任何需要拼接变量和常量来创建动态引用的情况,都可以擎起修习的这项“特技”!
以下是一些常见的应用场景
和相应的公式示例
:
引用特定月份的数据:
=INDIRECT("数据表" & TEXT(TODAY(), "YYYYMM") & "!A1")
引用基于用户输入的表:
假设用户在单元格B1中输入月份:
=INDIRECT("数据表" & B1 & "!A1")
根据行号引用单元格:
假设你需要在单元格B1中输入行号:
=INDIRECT("A" & B1)
创建动态范围:
假设你需要在单元格B1中输入起始行号,在单元格B2中输入结束行号:
=INDIRECT("A" & B1 & ":A" & B2)
在条件格式中使用:
如果你想在条件格式中引用基于某个单元格的值确定的范围:
=INDIRECT($A$1 & $B$1 & ":A" & $B$2)
记得在使用INDIRECT
时要注意以下几点:
INDIRECT
引用的字符串是一个有效的Excel引用。INDIRECT
可能会让工作簿变得复杂和缓慢。INDIRECT
时,公式计算可能会变得不那么直观,因此保持代码的可读性和注释是非常重要的。美 酒 虽 好 , 可 可 不 要 贪 杯 哦 美酒虽好,可可不要贪杯哦 美酒虽好,可可不要贪杯哦
indirect直接字符串地址引用虽然好使,方便快捷。但也是万不得已的操作,它也是有硬伤滴。
我的理念是,限量应用indect。
我一定要秉承这一刚正不阿的“理念”。虽然INDIRECT
函数非常强大和灵活,但它确实应该在必要时谨慎使用。
以下是一些为什么应该限量应用INDIRECT
的原因:
性能问题:INDIRECT
函数会导致工作簿的重新计算变慢,尤其是在包含大量数据和复杂公式的情况下。
可读性和可维护性:使用INDIRECT
的公式可能难以理解,尤其是对于不熟悉该函数的其他用户来说。这可能会增加维护工作簿的难度。
安全性:INDIRECT
函数可以引用外部文件,这可能会引入安全风险,特别是如果引用的文件包含恶意代码。
错误处理:如果INDIRECT
引用的地址无效或包含错误,它可能会导致公式错误,这些错误可能难以追踪和修正。
以下是一些替代INDIRECT
的方案:
使用名称管理器:为常用的单元格或范围创建命名,这样可以在公式中直接使用这些名称,而不是地址。
使用表格:在Excel中,可以将数据范围转换为表格,这样就可以使用表格的动态引用,如[Total Sales]
。
使用数组公式:对于复杂的计算,可以考虑使用数组公式来替代INDIRECT
。
使用VLOOKUP/HLOOKUP或XLOOKUP:对于查找操作,这些函数通常比INDIRECT
更直接和高效。
使用OFFSET和INDEX组合:虽然你提到不想使用OFFSET
,但在某些情况下,INDEX
和MATCH
的组合可以提供更直接的方式来引用数据。
只在确实需要动态引用时才使用INDIRECT
,这样可以确保你的工作簿既高效又安全。
基本语法
INDIRECT函数是Excel中一个用于返回指定单元格引用数据的函数。它的基础语法是:INDIRECT(reftext, [a1])
。
reftext
:这是一个必需的参数,代表对包含A1样式引用、R1C1样式引用、定义为引用的名称或作为文本字符串引用的单元格的引用。如果reftext
不是有效的单元格引用,INDIRECT将返回#REF
错!误。[a1]
:这是一个可选参数,是一个逻辑值,用于指定包含在单元格reftext
中的引用类型。如果a1
为TRUE或省略,reftext
被解释为A1样式的引用;如果a1
为FALSE,则将reftext
解释为R1C1样式的引用。例如,使用INDIRECT("A1")
会返回单元格A1中的内容。如果A1单元格包含的是引用B2,那么INDIRECT("A1")
将返回B2单元格中的内容。
INDIRECT函数在处理跨表查询和多级下拉菜单制作等方面非常有用,特别是在需要动态引用单元格时。它是Excel中一个非常强大且灵活的函数 。
INDIRECT函数在Excel中的进阶应用非常广泛和灵活。
以下是一些INDIRECT函数的进阶应用实例
:
动态地址引用:INDIRECT函数的一个重要应用是创建动态地址。例如,如果你在单元格D1中有一个字母"A",在D2中有一个数字"1",你可以通过在另一个单元格中使用公式=INDIRECT(D1&D2)
来动态地引用A1单元格的值。当你改变D1或D2中的内容时,引用的地址也会相应地改变 。
与变量结合使用:你可以在单元格引用地址中使用变量。例如,如果你想根据D2单元格中的行数从A列提取数字,可以使用公式=INDIRECT("A"&D2)
。这里的&A2将根据D2单元格的内容动态地改变引用的列地址 。
跨工作表引用:INDIRECT函数还可以用于跨工作表的引用。例如,如果你想引用名为"Sheet2"的工作表中的A1单元格,可以使用公式=INDIRECT("Sheet2!A1")
。这在你需要从不同的工作表中提取数据时非常有用 。
二维数据表查找:INDIRECT函数可以用于二维数据表的查找。通过结合使用INDIRECT和名称管理器,你可以根据行和列的名称来查找数据,这种方法在某些情况下甚至比VLOOKUP函数更为简单和直接 。
这些应用展示了INDIRECT函数的强大功能和灵活性,使其成为Excel中一个非常实用的工具。通过掌握这些高级技巧,你可以更有效地处理复杂的数据引用和查找任务。
INDIRECT函数在Excel中虽然功能强大,但也存在一些短板或限制
:
性能问题:当INDIRECT函数被用于包含大量公式的工作表中时,可能会导致性能问题。因为INDIRECT函数会强制Excel重新计算引用的单元格,这在处理大量数据时可能会显著降低Excel的性能 。
外部引用的限制:在使用INDIRECT函数进行外部引用时,被引用的工作簿必须打开,否则INDIRECT函数将返回引用错误#REF!。此外,Excel Web App不支持外部引用,这也限制了INDIRECT函数的使用范围 。
引用错误:如果INDIRECT函数引用的单元格区域超出了Excel允许的最大行数(1048576行)或最大列数(16384列),它也会返回引用错误#REF!。在Excel的早期版本中,这一限制可能会被忽略,但在最新版本中则会被严格执行 。
易出错性:由于INDIRECT函数的参数和引用方式较为复杂,使用时容易出错。尤其是在处理跨表和跨文档引用时,需要精确的地址和正确的引用格式,否则很容易出现错误 。
了解这些限制有助于在使用INDIRECT函数时更加小心谨慎,以避免潜在的问题。
通过修习,熟练掌握了indirect的必杀技巧,完全可以更加灵活地处理各种Excel引用问题。继续探索和学习,Excel的世界非常广阔!
我的HOT博:
本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有 7 7 7篇。
001
标题:让QQ群昵称色变的神奇代码
(浏览阅读 5.9w )
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:25 收藏:86 评论:17
摘要:让QQ昵称色变的神奇代码。
首发:2022-01-18 19:15:08
最后编辑:2022-01-20 07:56:47
002
标题:Python列表(list)反序(降序)的7种实现方式
(浏览阅读 1.1w )
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞:8 收藏:35 评论:8
摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
首发:2022-12-11 23:54:15
最后编辑:2023-03-20 18:13:55
003
标题:pandas 数据类型之 DataFrame
(浏览阅读 9.7k )
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:7 收藏:36
摘要:pandas 数据类型之 DataFrame_panda dataframe。
首发:2022-05-01 13:20:17
最后编辑:2022-05-08 08:46:13
004
标题:个人信息提取(字符串)
(浏览阅读 8.2k )
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:2 收藏:15
摘要:个人信息提取(字符串)_个人信息提取python。
首发:2022-04-18 11:07:12
最后编辑:2022-04-20 13:17:54
005
标题:Python字符串居中显示
(浏览阅读 7.6k )
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
评论:1
006
标题:罗马数字转换器|罗马数字生成器
(浏览阅读 7.5k )
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
摘要:罗马数字转换器|生成器。
首发:2022-01-19 23:26:42
最后编辑:2022-01-21 18:37:46
007
标题:回车符、换行符和回车换行符
(浏览阅读 6.0k )
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:2 收藏:3
摘要:回车符、换行符和回车换行符_命令行回车符。
首发:2022-02-24 13:10:02
最后编辑:2022-02-25 20:07:40
截屏图片
精品文章:
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: