Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'I saw a request for this on stackoverflow, so I submitted. It's kind of like something I did awhile ago.
- 'I'm not quite sure how this particular effort would be useful, but who knows.
- 'https://stackoverflow.com/questions/45091748/how-can-i-identify-all-cell-addresses-in-a-formula-using-vba
- Function Range_Finder(CellsToCheck As Range) As String
- Dim Cl As Range
- Dim TangoText As String
- Dim R_Hunting As Boolean: R_Hunting = True
- Dim C_Hunting As Boolean
- Dim End_Hunting As Boolean
- Dim InBracketROW As Boolean
- Dim InBracketCOLUMN As Boolean
- Dim MUSTB_BE_C As Boolean
- Dim Final_Answer As String
- Dim R1C1_STRING As String
- Dim C_String As String
- Dim R_String As String
- Dim InQuotes As Boolean
- For Each Cl In CellsToCheck.Cells
- TangoText = Cl.FormulaR1C1 & ")"
- Dim i As Integer '....
- For i = 1 To Len(TangoText)
- If InQuotes Then
- If Mid(TangoText, i, 1) = """" Then
- InQuotes = False
- R_Hunting = True
- End If
- ElseIf R_Hunting Or Mid(TangoText, i, 1) = "," Then
- C_Hunting = False
- End_Hunting = False
- InBracketROW = False
- InBracketCOLUMN = False
- MUSTB_BE_C = False
- C_String = ""
- R_String = ""
- If Mid(TangoText, i, 1) = "R" Then
- C_Hunting = True
- R_Hunting = False
- ElseIf Mid(TangoText, i, 1) = """" Then
- InQuotes = True
- R_Hunting = False
- End If
- ElseIf C_Hunting Then
- If InBracketROW Then
- If Mid(TangoText, i, 1) = "-" Or IsNumeric(Mid(TangoText, i, 1)) Then
- R_String = R_String & Mid(TangoText, i, 1)
- ElseIf Mid(TangoText, i, 1) = "]" Then
- R_String = Int(R_String) + Cl.Row
- InBracketROW = False
- C_Hunting = False
- MUSTB_BE_C = True
- Else
- 'NOT AN ADDRESS!
- R_Hunting = True
- End If
- ElseIf Mid(TangoText, i, 1) = "[" Then
- InBracketROW = True
- ElseIf IsNumeric(Mid(TangoText, i, 1)) Then
- R_String = R_String & Mid(TangoText, i, 1)
- ElseIf Mid(TangoText, i, 1) = "C" Then
- If R_String = "" Then
- R_String = Cl.Row
- End If
- End_Hunting = True
- C_Hunting = False
- Else
- R_Hunting = True
- End If
- ElseIf MUSTB_BE_C Then
- If Mid(TangoText, i, 1) = "C" Then
- End_Hunting = True
- MUSTB_BE_C = False
- Else
- R_Hunting = True
- End If
- ElseIf End_Hunting Then
- If InBracketCOLUMN Then
- If Mid(TangoText, i, 1) = "-" Or IsNumeric(Mid(TangoText, i, 1)) Then
- C_String = C_String & Mid(TangoText, i, 1)
- ElseIf Mid(TangoText, i, 1) = "]" Then
- Final_Answer = Final_Answer & " " & Cells(Int(R_String), Int(C_String) + Cl.Column).Address(RowAbsolute:=False, columnabsolute:=False)
- R_Hunting = True
- Else
- R_Hunting = True
- End If
- ElseIf Mid(TangoText, i, 1) = "[" Then
- InBracketCOLUMN = True
- ElseIf IsNumeric(Mid(TangoText, i, 1)) Then
- C_String = Mid(TangoText, i, 1) & C_String
- Else
- If C_String = "" Then
- C_String = Cl.Column
- End If
- Final_Answer = Final_Answer & " " & Cells(Int(R_String), Int(C_String)).Address(RowAbsolute:=False, columnabsolute:=False)
- R_Hunting = True
- End If
- End If
- Next i
- Next Cl
- Range_Finder = Final_Answer
- End Function
Add Comment
Please, Sign In to add comment