我有一个有效的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
如果命名范围具有工作簿范围,则公式为:
"=PERSONAL.XLSB!Function(INDEX(myRange,0,1))"
此代码可用于FillDown: