如何列出超过公式中引用的所有单元格
问:Excel没有提供便捷的方法来找到所给单元格的所有引用单元格,虽然范围对象有一个引用单元属性,但只适用于引用单元格都在同一工作表上的情况。
例如,下所示的工作表第一页,在单元格一流的中的公式为=B3 5,而单元格B3中的公式又引用了单元格D2和E2,单元格D2甚至引用了另一工作表第2页中的单元格A1。
通过公式选项卡中的"追踪引用单元格"命令,可以看到单元格一流的的引用关系如下所示。
下面的程序:
子测试()
暗淡无光检查范围
变暗变暗作为范围
作为范围变暗
设置滚屏=范围(“A1”)
出错时继续下一步
设置rngPrecedents=rngToCheck .引用单元
出现错误转到
如果没有,那么
调试。打印检查地址(外部:=真)"没有引用单元格."
其他
对于每个rngp后退在rngp后退中
调试。打印后退地址(外部:=真)
下一个
如果…就会结束
末端接头
得到的结果是:
[qa49。xlsm]第1页!3美元
[qa49。xlsm]第1页!2美元
[qa49。xlsm]第1页!2美元
并没有追踪列出第3级的引用关系,即对工作表第2页中单元格一流的的引用。
由于大多数电子表格计算横跨多个工作表,因此引用单元属性不能满足要求,能不能编写一个程序用来列出含有公式的单元格引用的所有单元格?
答:可以编写VBA程序来解决引用单元属性的局限。这个程序会确定所提供的单元格区域的引用单元格并以正确的引用顺序列出它们,唯一的限制是无法重新计算已关闭工作簿、隐藏的工作表、受保护工作表或循环引用中的引用单元格。
在colinlegg.wordpress.com中,使用下面的程序(本文在整理时略有修改)可以列出单元格一流的的引用单元格和层级关系。
Sub testGetAllPrecedents()
暗淡无光检查范围
作为对象的模糊医学
模糊如龙
将字符串变暗为字符串
设置rngToCheck=Sheet1 .范围(“A1”)
设置医疗先例
str="单元格"活动单元格。地址(假,假)"中的公式为: " _
活动单元格.vbCrLf公式
str=str "其依次引用的单元格信息如下:“vbCrLfvbCrLf
str=str "层级" vbTab "引用的单元格" vbTab vbTab "公式“vbCrLf
如果是医疗器械。计数=然后
MsgBox rngToCheck .地址(外部:=真)"没有引用单元格."
其他
对于I=LBound(医学术语).键)到UBound(医疗后退。钥匙)
str=str dicAllPrecedents .项目()(一)vbTab
str=str dicAllPrecedents .Keys()(i) vbTab
字符串=字符串范围(医疗补助key()(I)).vbCrLf公式
接下来我
如果…就会结束
对话框字符串
末端接头
公共函数获取所有首选项(ByRef rngtoccheck As Range)作为对象
Const lngTOP_LEVEL As Long=1
作为对象的模糊医学
模糊字符串
设置医疗撤回=创建对象("脚本。字典")
申请。屏幕更新=假
GetPrecedents rngToCheck,dicAllPrecedents,lngTOP_LEVEL
设置getall偏好=医疗偏好
申请。屏幕更新=真
结束功能
私有子获取先例(按范围查找,按对象查找,按级别查找)
将单元格范围调暗
变暗公式作为范围
如果不是,请点击。工作表。保护内容
如果rngToCheck .单元格。计数大一个
出错时继续下一步
设置rngFormulas=rngToCheck .特殊单元格(xlCellTypeFormulas)
出现错误转到
其他
如果rngToCheck .HasFormula然后SetrngFormulas=rngToCheck
如果…就会结束
如果不是,公式什么也不是
对于公式中的每个单元格。细胞
医疗器械行业
下一个rngCell
rngFormulas .工作表。清除箭头
如果…就会结束
如果…就会结束
末端接头
私有子获取单元格引用(作为范围的单元格,作为对象的单元格,作为长度的单元格)
暗淡无光一样长
模糊不清一样长
模糊布尔值作为布尔值
将字符串形式的字符串地址变暗
调暗范围作为范围
做
lngArrow=lngArrow 1
blnNewArrow=真
lngLink=
做
lngLink=lngLink 1
rngCell .显示先例
出错时继续下一步
设置rngPrecedentRange=rngCell .导航行(真、低、低)
如果呃.号码然后
退出做
如果…就会结束
出现错误转到
strPrecedentAddress=rngpredentrange .地址(假,假,xlA1,真)
如果strPrecedentAddress=rngCell .地址(假,假,x1,真)然后
退出做
其他
blnNewArrow=False
如果不是医疗用品。存在(地址)然后
医疗器械。添加字符串地址,级别
GetPrecedentsrngPrecedentRange,medicalprevents,lngLevel 1
如果…就会结束
如果…就会结束
环
如果失败,那么退出
环
末端接头
getall首选项函数返回一个词典对象,包含在键中的单元格地址和在项中的引用层级。代码使用了递归:获取先例过程和获取单元格先例过程一遍一遍地相互调用,直到遍历完所有引用单元格。
对于上面的示例工作表,运行代码后的结果如下所示。
版权声明:如何列出超过公式中引用的所有单元格是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。