Как правильно заменить формулу типа R1C1 на формулу именованного диапазона в Excel-VBA? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть код VBA (на Sheet2), который использует публичную функцию для выполнения расчета на основе данных на Sheet1, столбец B. Затем после использования функции FillDown, чтобы получить аналогичные вычисления для остальных строк. Работает просто отлично:

    Range("B2").FormulaR1C1 = "=PERSONAL.XLSB!Scoring(Sheet1!RC2)"
    Range("B2:B2", "A" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown   

Открытая функция проверяет ячейку и присваивает оценку в соответствии с найденным значением.

Public Function Scoring(str As String)

Dim check As Integer

check_str = 0

If str = "US" Then check_str = 1

    If check_str = 1 Then Scoring = "1"
    If check_str = 0 Then Scoring = "0"

End Function

Моя цель состоит в том, чтобы использовать именованные диапазоны вместо стиля формулы R1C1 , чтобы избежать каких-либо осложнений, если порядок столбцов Sheet1 будет изменен в любой точке. Я предполагаю, что есть возможности циклически проходить через именованные диапазоны, но я хотел бы, чтобы были какие-то более простые способы (не уверен, что они существуют) ... Код, который был бы простым подходом к проблеме (просто замена типа R1C1 нассылка на столбец в именованном диапазоне), не работает:

    Range("B2").Formula = "=PERSONAL.XLSB!Scoring(Sheet1!Range("myRange").Columns(1))"
    Range("B2:B2", "A" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown       

Буду признателен за любую помощь, поскольку я довольно новичок в Excel-VBA.

Ответы [ 2 ]

3 голосов
/ 24 октября 2019

Если указанный диапазон имеет область действия рабочей книги, ваша формула будет иметь вид:

"=PERSONAL.XLSB!Function(INDEX(myRange,0,1))"

для ссылки на первый столбец этого диапазона. Если имя имеет область видимости, используйте Sheet1!myRange в формуле.

0 голосов
/ 04 ноября 2019

Этот код работает с FillDown:

Range("B2").Formula = "=PERSONAL.XLSB!Scoring(INDEX(Sheet!myRange,ROWS($A$1:$A1),1))"
Range("B2:B2", "A" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...