我有一个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的新手。
如果命名范围具有工作簿范围,则公式为:
"=PERSONAL.XLSB!Function(INDEX(myRange,0,1))"
指该范围的第一列。如果名称具有工作表范围,则在公式中使用Sheet1!myRange
。