PGSystemTester

Excel UDF To Display Formula Reference Cells as Text

Jul 14th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     'I saw a request for this on stackoverflow, so I submitted. It's kind of like something I did awhile ago.
  2.     'I'm not quite sure how this particular effort would be useful, but who knows.
  3.     'https://stackoverflow.com/questions/45091748/how-can-i-identify-all-cell-addresses-in-a-formula-using-vba
  4.  
  5.     Function Range_Finder(CellsToCheck As Range) As String
  6.  
  7.     Dim Cl As Range
  8.     Dim TangoText As String
  9.     Dim R_Hunting As Boolean: R_Hunting = True
  10.     Dim C_Hunting As Boolean
  11.     Dim End_Hunting As Boolean
  12.     Dim InBracketROW As Boolean
  13.     Dim InBracketCOLUMN As Boolean
  14.     Dim MUSTB_BE_C As Boolean
  15.     Dim Final_Answer As String
  16.     Dim R1C1_STRING As String
  17.     Dim C_String As String
  18.     Dim R_String As String
  19.     Dim InQuotes As Boolean
  20.  
  21.  
  22.  
  23.     For Each Cl In CellsToCheck.Cells
  24.  
  25.     TangoText = Cl.FormulaR1C1 & ")"
  26.  
  27.     Dim i As Integer '....
  28.    For i = 1 To Len(TangoText)
  29.  
  30.  
  31.     If InQuotes Then
  32.         If Mid(TangoText, i, 1) = """" Then
  33.             InQuotes = False
  34.             R_Hunting = True
  35.         End If
  36.  
  37.  
  38.  
  39.     ElseIf R_Hunting Or Mid(TangoText, i, 1) = "," Then
  40.         C_Hunting = False
  41.         End_Hunting = False
  42.         InBracketROW = False
  43.         InBracketCOLUMN = False
  44.         MUSTB_BE_C = False
  45.         C_String = ""
  46.         R_String = ""
  47.  
  48.         If Mid(TangoText, i, 1) = "R" Then
  49.             C_Hunting = True
  50.             R_Hunting = False
  51.  
  52.         ElseIf Mid(TangoText, i, 1) = """" Then
  53.             InQuotes = True
  54.             R_Hunting = False
  55.  
  56.         End If
  57.  
  58.  
  59.  
  60.     ElseIf C_Hunting Then
  61.  
  62.         If InBracketROW Then
  63.             If Mid(TangoText, i, 1) = "-" Or IsNumeric(Mid(TangoText, i, 1)) Then
  64.                 R_String = R_String & Mid(TangoText, i, 1)
  65.             ElseIf Mid(TangoText, i, 1) = "]" Then
  66.                 R_String = Int(R_String) + Cl.Row
  67.                InBracketROW = False
  68.                C_Hunting = False
  69.                MUSTB_BE_C = True
  70.  
  71.             Else
  72.                 'NOT AN ADDRESS!
  73.                R_Hunting = True
  74.             End If
  75.  
  76.  
  77.         ElseIf Mid(TangoText, i, 1) = "[" Then
  78.             InBracketROW = True
  79.  
  80.  
  81.         ElseIf IsNumeric(Mid(TangoText, i, 1)) Then
  82.             R_String = R_String & Mid(TangoText, i, 1)
  83.  
  84.         ElseIf Mid(TangoText, i, 1) = "C" Then
  85.             If R_String = "" Then
  86.                 R_String = Cl.Row
  87.             End If
  88.  
  89.  
  90.             End_Hunting = True
  91.             C_Hunting = False
  92.  
  93.  
  94.         Else
  95.             R_Hunting = True
  96.  
  97.  
  98.         End If
  99.  
  100.     ElseIf MUSTB_BE_C Then
  101.         If Mid(TangoText, i, 1) = "C" Then
  102.             End_Hunting = True
  103.             MUSTB_BE_C = False
  104.  
  105.         Else
  106.             R_Hunting = True
  107.         End If
  108.  
  109.  
  110.     ElseIf End_Hunting Then
  111.  
  112.         If InBracketCOLUMN Then
  113.             If Mid(TangoText, i, 1) = "-" Or IsNumeric(Mid(TangoText, i, 1)) Then
  114.                 C_String = C_String & Mid(TangoText, i, 1)
  115.  
  116.             ElseIf Mid(TangoText, i, 1) = "]" Then
  117.  
  118.                 Final_Answer = Final_Answer & " " & Cells(Int(R_String), Int(C_String) + Cl.Column).Address(RowAbsolute:=False, columnabsolute:=False)
  119.                 R_Hunting = True
  120.  
  121.             Else
  122.  
  123.                 R_Hunting = True
  124.             End If
  125.  
  126.  
  127.         ElseIf Mid(TangoText, i, 1) = "[" Then
  128.             InBracketCOLUMN = True
  129.  
  130.         ElseIf IsNumeric(Mid(TangoText, i, 1)) Then
  131.             C_String = Mid(TangoText, i, 1) & C_String
  132.  
  133.         Else
  134.  
  135.                 If C_String = "" Then
  136.  
  137.                     C_String = Cl.Column
  138.                 End If
  139.  
  140.             Final_Answer = Final_Answer & " " & Cells(Int(R_String), Int(C_String)).Address(RowAbsolute:=False, columnabsolute:=False)
  141.  
  142.         R_Hunting = True
  143.  
  144.        End If
  145.  
  146.     End If
  147.  
  148.  
  149.  
  150.     Next i
  151.  
  152.     Next Cl
  153.  
  154.     Range_Finder = Final_Answer
  155.  
  156.     End Function
Add Comment
Please, Sign In to add comment