Excel公式中的VBA命名范围

Posted

技术标签:

【中文标题】Excel公式中的VBA命名范围【英文标题】:VBA Named Range in Excel Formula 【发布时间】:2018-12-06 20:47:42 【问题描述】:

我正在使用以下代码添加范围:

Combined_Data.Range("A1:AZ200").Find("Marker").Offset(1,0).Select  
Range(Selection, Selection.End(xlDown)).Select  
ThisWorkbook.Names.Add Name:="Marker",RefersTo:=Selection

当我在 excel 公式(直接输入电子表格)中使用命名范围“标记”时,工作簿似乎不尊重范围中包含的值。我可以让它工作的唯一方法是使用 R1C1 对范围内我想要的单元格的引用。

有谁知道如何避免特定的单元格引用?

当我查看名称管理器时,该范围的实际单元格引用是正确的。在本例中为:A6:A1655。名称管理器有:='组合数据'!$A$6:$A$1655

当我使用 R1C1 引用时,范围在名称管理器中显示相同。

【问题讨论】:

你是如何声明/定义Combined_Data的? 请给出在excel公式中使用命名范围“标记”给出错误结果的示例(创建并发布数据设定和预期和实际结果) Combined_Data 是工作表的名称。 =SUMPRODUCT(SUMIFS(Amount,Payor_Name,D$7,Marker,$B$8,Bill_Area_Data,Report_BillArea,Post_Date,Rpt_Month,Encounter_Type, Encounter_Type_Selection)) 如您所见,我有几个命名范围,我对它们的定义都是一样的方式(使用最初发布的代码)。 公式不会出错,只是不返回任何内容。当我使用名称管理器或在 VBA 中使用 R1C1 引用手动添加相同的范围时,公式会返回值。 【参考方案1】:

所有范围都应完全符合同一工作表Combined_Data。您还需要将 Range.Find() After 参数设置为 Range 中的第一个单元格。

Dim marker As Range

With Combined_Data
    Set marker = .Range("A1:AZ200").Find("Marker", After:=.Range("A1"))
    If Not marker Is Nothing Then
        Set marker = marker.Offset(1, 0)
        Set marker = .Range(marker, marker.End(xlDown))
        marker.Name = "Marker"
    End If
End With

这些视频会有所帮助:Excel VBA Introduction Part 5 - Selecting Cells (Range, Cells, Activecell, End, Offset) 和 Excel VBA Introduction Part 15a - Find and FindNext

【讨论】:

范围“完全合格”是什么意思? Range() 是不合格的,因为它引用了默认工作表上的单元格。 Fully Qualified 指的是隐式设置为工作表的范围(例如 Worksheets("Sheet1").Range())。当处理多个工作簿时,工作表应该是Fully Qualified 到一个工作簿,Workbooks("Book1").Worksheets("Sheet1").Range())。这将确保您始终使用预期的 Range。 范围内的单元格和范围也应符合相同的工作表。最好的方法是使用 With 语句。在某些情况下,设置工作表变量是有好处的。 Set ws = Workbooks("Book1").Worksheets("Sheet1"), Range(ws.Range(),ws.Range()), ws.Range(ws.Range(),ws.Range()), ws.Range(ws.Range(),ws.Cells()), 建议的代码有效,但鉴于名称管理器中列出的范围具有正确的名称和单元格引用,为什么我的代码无效? @PhillipKreighbaum 工作表公式应使用命名范围进行更新。我不知道为什么它不会,如果你 100% 确定命名范围是正确的。我原以为您的命名范围可能由于未设置Range.Find() 使用的第一个单元格而关闭。

以上是关于Excel公式中的VBA命名范围的主要内容,如果未能解决你的问题,请参考以下文章

Excel 自动填充和调整公式

Excel VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)

excel vba将公式转为数值

从 Excel 与 VBA 调用时,VBA UDF 给出不同的答案

Excel VBA 删除公式并另存为 v2

excel vba将公式转为数值