繁体   English   中英

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

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

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

在我使用 FillDown function 得到行的 rest 的类似计算之后。

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

公共 Function 检查单元格并根据找到的值分配分数。

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       

如果命名范围有工作簿 scope,您的公式将是:

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

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

此代码适用于 FillDown:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM