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 VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)