Неочевидный Excel. Возможность, которую не надо использовать

В процессе реализации идеи по «автоматизации отчета» узнал о существовании функции:

Application.Caller.Address

Которая позволяет узнать адрес ячейки, для которой выполняется вычисление функции.

Вопрос: возможно ли использовать ее для модификации содержимого ячейки?

Важные замечание!

Само формирование такого вопроса ошибочно, потому что нарушает требования к написанию кода: исполняемая функция не должна производить побочное действие.

Все возможности, описанные ниже не стоит использовать, потому что:

  • функции реализуют побочное действие
  • код трудно сопровождать и поддерживать
  • без детальной документации будет проблематично вспомнить о том, что происходит

Код приводится только для примера того как не надо делать!

Ошибочно написанная функция такого вида:

Function a()
	a = 1
	Cells(1, 1) = 1
End Function

будет исполняться в редакторе кода. Однако в случае вызова из ячейки выполнение функции будет остановлено и показано сообщение об ошибке:

отображение ошибки при попытке изменить ячейку в момент вызова пользовательской функции

Трюк, позволяющий изменить значение в ячейке, вызывающей функцию

Для реализации функции, удаляющей содержимое вызвавшей ее ячейки необходимо:

  • создать функцию
Function deleteCellValue(pCell)
    Application.Volatile
    
    pCell.Value = ""
End Function
  • выбрать на листе ячейку, в которую нужно поместить функцию
  • создать именованную формулу (задаются через «Диспетчер имен» в поле «Диапазон»), вызывающую функцию, передавая ей адрес ячейки
создание именованной функции
  • создать функцию, вызывающую именованную формулу
Function deleteSelf()
    Application.Volatile
    
    [del]
End Function
  • добавить вызов функции deleteSelf в ячейку
вызов функции, удаляющей содержимое вызвавшей ячейки

После ввода формулы ее содержимое будет очищено.

Данная реализация бесполезна, гораздо практичнее воспользоваться условной функцией, которая будет удалять содержимое ячейки только при выполнении какого-то критического условия (в примере 1=-1)

очистка содержимого ячейки в момент неправильного выполнения