在Excel-VBA中将R1C1类型公式替换为命名范围公式的正确方法是什么?

问题描述 投票:0回答:1

我有一个VBA代码(在Sheet2上),该代码使用Public Function从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的新手。

excel vba named-ranges
1个回答
2
投票

如果命名范围具有工作簿范围,则公式为:

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

指该范围的第一列。如果名称具有工作表范围,则在公式中使用Sheet1!myRange

© www.soinside.com 2019 - 2024. All rights reserved.