【发布时间】:2019-10-24 08:07:47
【问题描述】:
我有一个工作 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
【问题讨论】:
-
如果
Range("B2:B2", "A" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown有效,我会感到惊讶。可以发一下你的函数代码吗? -
Sheet1!Range("myRange").Columns(1))的目的是什么?您是否试图仅引用命名范围中的第一列?如果是这样,该函数做了什么,它可以处理这个输入吗? -
@SJR ,公共函数检查单元格并根据找到的值分配分数。 (见更新 - 上面)
-
(1) 您的函数声明了
check,但随后使用了check_str和check_ip(但似乎没有做任何有意义的事情)(2)请不要调用函数“Function " (3) 它返回一个字符串,并使用一个字符串作为参数,所以你不能传递一个单元格范围。 -
@Plutian 是的,我正在尝试引用命名范围中的第一列,希望 FillDown 会选择适当的行(以及确切的单元格),类似于它与 R1C1 公式的工作方式风格。但有可能吗?...
标签: excel vba named-ranges