Excel 从公式中提取单元格地址
我正在寻找一种从公式中提取地址/范围的方法。我在下面创建了一个示例公式Excel 从公式中提取单元格地址,excel,vba,excel-formula,Excel,Vba,Excel Formula,我正在寻找一种从公式中提取地址/范围的方法。我在下面创建了一个示例公式 =SUMIFS(Worksheet_Name!$C$3:$C$20, Worksheet_Name!$A$3:$A$20, "Blue", Worksheet_Name!$B$3:$B$20, "Green") 我试图得到某种VBA例程,我可以把公式分离出来 我想得到如下范围: Worksheet_Name!$C$3:$C$20 Worksheet_Name!$A$3:$A$20 Worksheet_Name!$B$3
=SUMIFS(Worksheet_Name!$C$3:$C$20, Worksheet_Name!$A$3:$A$20, "Blue", Worksheet_Name!$B$3:$B$20, "Green")
我试图得到某种VBA例程,我可以把公式分离出来
我想得到如下范围:
Worksheet_Name!$C$3:$C$20
Worksheet_Name!$A$3:$A$20
Worksheet_Name!$B$3:$B$20
因此,我可以单独访问这些内容。下面如何,这将以一个单元格作为输入,然后它将去掉括号外的任何内容,并用逗号将公式的其余部分拆分为一个数组,然后它将显示在Msgbox中,但您可以根据需要进行调整:
Sub Get_Ranges_In_Formula()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
'declare the worksheet you are working with
Dim rngs As String
Dim arrayofRngs
cellvalue = ws.Range("A1").Formula
'get the formula from the cell
openingParen = InStr(cellvalue, "(")
closingParen = InStrRev(cellvalue, ")")
rngs = Mid(cellvalue, openingParen + 1, closingParen - openingParen - 1)
'strip anything outside the brackets
arrayofRngs = Split(rngs, ",")
'split by comma into array
For i = LBound(arrayofRngs) To UBound(arrayofRngs)
If InStr(arrayofRngs(i), "!") > 0 Then MsgBox arrayofRngs(i)
Next
End Sub
使用正则表达式从公式中提取单元格引用的解决方案:
Sub Get_Ranges_In_Formula()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim xRetList As Object
Dim xRegEx As Object
Dim I As Long
Dim xRet As String
Dim Rg As Range
Set Rg = ws.Range("A1")
Application.Volatile
Set xRegEx = CreateObject("VBSCRIPT.REGEXP")
With xRegEx
.Pattern = "('?[a-zA-Z0-9\s\[\]\.]{1,99})?'?!?\$?[A-Z]{1,3}\$?[0-9]{1,7}(:\$?[A-Z]{1,3}\$?[0-9]{1,7})?"
.Global = True
.MultiLine = True
.IgnoreCase = False
End With
Set xRetList = xRegEx.Execute(Rg.Formula)
If xRetList.Count > 0 Then
For I = 0 To xRetList.Count - 1
MsgBox xRetList.Item(I)
Next
End If
End Sub
试试这个
Sub Test()
Dim e, s As String
s = MyArguments(Range("A1"))
For Each e In Split(s, ",")
If InStr(e, "!") Then Debug.Print Trim(e)
Next e
End Sub
Function MyArguments(rng As Range) As String
MyArguments = Split(Split(rng.Formula, "(")(1), ")")(0)
End Function
是的,你已经解决了一些公式,比如例子sumifs。是的,你已经解决了一些公式,比如例子sumifs。然而,我永远不知道我在使用什么样的公式;例如,它可以是:=Sum(A1:A2)+Sum(A3:A4),这将不起作用。此外,它可能是索引匹配等。因此,在拆分“,”时可能不需要这样做solution@JamesGTaylor我的更新解决方案现在应该适用于两个公式示例,…)如果您有office 365,请查看
FORMULATEXT
。查看