将 R1C1 类型公式替换为 Excel-VBA 中的命名范围公式?

Replace R1C1 type formula to a named range formula in Excel-VBA?

我有一个有效的 VBA 代码(在 Sheet2 上),它使用 Public 函数使用 Sheet1 B 列上的数据进行计算。

在我使用 FillDown 函数对其余行进行类似的计算之后。

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

Public 函数检查单元格并根据找到的值分配分数。

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       

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

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

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

此代码适用于 FillDown:

Range("B2").Formula = "=PERSONAL.XLSB!Scoring(INDEX(Sheet!myRange,ROWS($A:$A1),1))"
Range("B2:B2", "A" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown