Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2020, 12:49   #1
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию Как в функции получить номер строки таблицы из которой она вызвана?

Добрый день.

На листе создан именованный диапазон тип таблица. Скажем, "distination".
Таблица с заголовком смещена вниз.
В одном из столбцов таблицы формула использующая вызов пользовательской функции (excel vba)

Application.Caller.row возвращает номер на листе. Например, для формулы в 1 строке таблицы, это 5. Пятая строка на листе.

А, Application.Caller.Range("distinati on").row возвращает непонятно что. Почему-то 9 для той же ячейки.

Есть правильное решение вместо Application.Caller.row - 4?
zw2auP&#j29! вне форума Ответить с цитированием
Старый 14.08.2020, 17:44   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно посчитать - от номера строки листа отнять номер первой строки Range("distinati on") и прибавить 1.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.08.2020, 18:17   #3
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию

Hugo121,
Простите не понял. Вы предлагаете глазами посчитать где находится первая строка Range("distination") и сохранить константу в коде? Или есть метод возвращающий номер строки на листе где начинается искомый Range?
zw2auP&#j29! вне форума Ответить с цитированием
Старый 14.08.2020, 19:04   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Как мне кажется - это те числа что Вы выше привели. Вам виднее - файл у Вас, а мне его делать лень.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.08.2020, 19:11   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Может так?
Код:
Function fff(r As Range)
    fff = Application.Caller.Row - Application.Caller.Parent.Range("distination").Row + 1
End Function
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 17.08.2020, 10:35   #6
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Может так?
Код:
Function fff(r As Range)
    fff = Application.Caller.Row - Application.Caller.Parent.Range("distination").Row + 1
End Function
Благодарю. То, что нужно.
zw2auP&#j29! вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перейти в процедуру, в которой была вызвана другая процедура olenka.ke Паскаль, Turbo Pascal, PascalABC.NET 9 31.10.2015 18:08
Как получить номер последней строки закрытой книги G_D_A Microsoft Office Excel 8 15.01.2012 00:35
Дана квадратная матрица А порядка n. Найдите номер строки матрицы, в которой больше всего единичных элементов. JMS Паскаль, Turbo Pascal, PascalABC.NET 1 13.01.2012 06:50
Получить из данной строки новую строку, в которой каждый символ продублировать grev_4 Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2010 23:42
номер строки, для которой среднее арифметическое её элементов минимально.QBasic pionerka Помощь студентам 3 31.05.2010 20:15