标签:VBA
下面的VBA过程在指定的新工作表中列出指定工作表中的所有公式,包含具体的公式、所在工作表名称及其所在单元格地址。
代码:
代码语言:javascript复制Sub ListAllFormulas()
Dim sht As Worksheet
Dim rSheet As Worksheet
Dim myRng As Range
Dim newRng As Range
Dim c As Range
Dim endRow As Long
'放置公式的工作表, 可修改为你的实际工作表名
Set rSheet = Sheets("FormulasSheet")
'要查找公式的工作表, 可修改为你的实际工作表名
Set sht = Sheets("Sheet1")
'查找已使用的单元格区域
Set myRng = sht.UsedRange
'错误处理, 以应对没有公式的情形
On Error Resume Next
'使用SpecialCells进一步减少循环
Set newRng = myRng.SpecialCells(xlCellTypeFormulas)
'仅遍历SpecialCells区域
For Each c In newRng
With rSheet
'设置放置公式工作表中有数据行之下的空行
endRow = .Range("A" & Rows.Count).End(xlUp).Row 1
'去掉公式中的"="号后, 将公式放置在列A中
.Range("A" & endRow).Value = Mid(c.Formula, 2, (Len(c.Formula)))
'放置包含公式的工作表名在列B中
.Range("B" & endRow).Value = sht.Name
'放置去除了绝对符号$的公式所在单元格地址于列C中
.Range("C" & endRow).Value = Application.WorksheetFunction.Substitute(c.Address, "$", "")
End With
Next c
On Error GoTo 0
'自动调整列宽
rSheet.Columns("A:C").AutoFit
End Sub
注意,程序假设放置公式的工作表第一行是标题行。