【问题标题】:Replace R1C1 type formula to a named range formula in Excel-VBA?将 R1C1 类型公式替换为 Excel-VBA 中的命名范围公式?
【发布时间】: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_strcheck_ip(但似乎没有做任何有意义的事情)(2)请不要调用函数“Function " (3) 它返回一个字符串,并使用一个字符串作为参数,所以你不能传递一个单元格范围。
  • @Plutian 是的,我正在尝试引用命名范围中的第一列,希望 FillDown 会选择适当的行(以及确切的单元格),类似于它与 R1C1 公式的工作方式风格。但有可能吗?...

标签: excel vba named-ranges


【解决方案1】:

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

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

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

【讨论】:

  • "=PERSONAL.XLSB!Function(INDEX(myRange,1,1))" 在我的情况下有效,但仅适用于第一行。对于 FillDown 之后的所有其他行,结果是相同的,因为 INDEX(myRange,1,1)) 指的是命名范围中的同一单元格。我想那时仍然需要某种循环......
  • 你为什么在最后使用1, 1) 而不是我发布的内容?您的版本指的是第一列中的第一个单元格。我的指的是整个第一列。
  • 我尝试了几次,0,1) 版本,它给了我#VALUE!表格的所有单元格中的错误。但是,,1,1) 版本适用于第一行...我还缺少什么?
  • 你的函数期望什么输入?一个值还是一整列?您的原始编码建议使用一整列。
  • 您可以使用:INDEX(myRange,1,ROWS($A$1:$A1)),它会在您填写时进行调整。
【解决方案2】:

此代码适用于 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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多