На этот вопрос уже есть ответ здесь:
Как можно Я получаю ячейку, из которой вызывается моя функция VBA?
Другими словами, каков эквивалент VBA для INDIRECT (ROW (), COLUMN ())?
Я не ищу ActiveCell .
Я хочу иметь простая функция ThisRow_Col (rColumn As String)
возвращает столбец X строки, из которой она вызывается. Скажем, в B2 я вызываю = ThisRow_Col ("A"), он должен вернуть значение A2. Это должно работать независимо от того, какая ячейка активна.
EDIT : Спасибо, Чарльз за ответ: Application.Caller . Следующий код получает столбец X текущей строки, независимо от того, где находится выделение:
Function ThisRow_Col(rColumn As Range)
' Return INDIRECT(rcolumn & ROW())
ThisRow_Col = Application.Caller.Worksheet.Cells(Application.Caller.Row, rColumn.Column).Value
End Function
Обратите внимание, что передача столбца в виде диапазона ( ThisRow_Col (A1)
) лучше, чем передача его в виде строки. , потому что Excel может автоматически обновлять формулы при перемещении или вставке столбцов. Конечно, строка 1
из A1
- это просто соглашение.