Я создал функцию, которая вернет ссылку Nth, которая содержит имя листа (если оно есть), однако оно не работает для всех экземпляров. Строка регулярного выражения я используюСоответствие и регулярное выражение Excel в формуле
'[\w ]+[']!([$]{0,1})([A-Z]{1,2})([$]{0,1})(\d{1,5})
Я нахожу, хотя он не найдет первое упоминание в любом из приведенных ниже примеров:
='Biscuits Raw Data'!G783/'Biscuits Raw Data'!E783
=IF('Biscuits Raw Data'!G705="","",'Biscuits Raw Data'!G723/'Biscuits Raw Data'!G7005*100)
Ниже мой код функции:
Function GrabNthreference(Rng As range, NthRef As Integer) As String
Dim patrn As String
Dim RegX
Dim Matchs
Dim RegEx
Dim FinalMatch
Dim Subm
Dim i As Integer
Dim StrRef As String
patrn = "'[\w ]+[']!([$]{0,1})([A-Z]{1,2})([$]{0,1})(\d{1,5})"
StrRef = Rng.Formula
Set RegEx = CreateObject("vbscript.regexp") ' Create regular expression.
RegEx.Global = True
RegEx.Pattern = patrn ' Set pattern.
RegEx.IgnoreCase = True ' Make case insensitive.
Set RegX = RegEx.Execute(StrRef)
If RegX.Count < NthRef Then
GrabNthreference = StrRef
Exit Function
End If
i= -1
For Each Matchs In RegX ' Iterate Matches collection.
Set Subm = RegX(i).submatches
i = i + 1
If i = NthRef -1 Then
GrabNthreference = RegX(i)
Exit Function
End If
'Debug.Print RegX(i)
Next
End Function
aha! нашел какой-то другой код, который заставило меня понять мою ошибку в том, что i = i + 1 увеличивал до 1 до сообщения RegX (i), когда i = 0. Я откажусь от вышеуказанного кода и воспользуюсь следующим. Спасибо за @ michael-møldrup за его код. [Ссылка] (http://stackoverflow.com/questions/13835466/find-all-used-references-in-excel-formula) – Rodp