将 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
我有一个有效的 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