Для простых формул:
Sub PrettyPoorParser()
Dim r As Range, rr As Range
With Range("D4")
Set r = .DirectPrecedents
msg = r.Count
For Each rr In r
msg = msg & vbCrLf & rr.Address(0, 0)
Next rr
End With
MsgBox msg
End Sub
![enter image description here](https://i.stack.imgur.com/KEoyk.png)
К сожалению, этот простой подход не будет работать со всеми формулами.Его легко обмануть, используя INDIRECT () и ссылки на листе.
EDIT # 1:
Вместо использованияпарсер рекурсивного спуска, он использует свойство объекта Range.Это свойство довольно хорошее, но не всеобъемлющее.Что касается запуска этого кода в среде VBA-EXCEL:
Макросы очень просты в установке и использовании:
- ALT-F11 открывает окно VBE
- ALT-I ALT-M открывает новый модуль
- вставляет материал и закрывает окно VBE
Если вы сохраните книгу, макрос будет сохранен вместе с ней.Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx
. Чтобы удалить макрос:
- , откройте окно VBE каквыше
- очистить код
- закрыть окно VBE
Чтобы использовать макрос из Excel:
- ALT-F8
- Выберите макрос
- Нажмите RUN
Чтобы узнать больше о макросах в целом, см .:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
и
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
Для этого должны быть включены макросы!
Несколько лет назад я начал работать над реальным парсером (как инструмент отладки) , но получил это назначение.