根据命名范围/单元格分配值

Posted

技术标签:

【中文标题】根据命名范围/单元格分配值【英文标题】:Assign value based on named range/cell 【发布时间】:2020-06-03 21:23:30 【问题描述】:

我想根据当前单元格名称分配当前单元格值。

例如,(参见工作表图像)单元格 B3 已分配名称“ABC”,B4 已分配名称“EFG”,B5 已分配名称“XYZ”,我希望单元格 B3:B5 自动从列中的表中提取相应的值D:E。

所以我想出的是:

步骤 1. 使用 UDF 识别当前单元格的名称

Function cell_name() As String
Dim rng As Range
On Error Resume Next
Set rng = ActiveCell
If Len(rng.Name.Name) < 0 Then
   cell_name = "No named Range"
   Exit Function
End If
cell_name = rng.Name.Name
If InStr("cell_name", "!") > 0 Then
   cell_name = Right(cell_name, Len(cell_name) - InStr(cell_name, "!"))
End If
End Function

**我没有想出上面的 VBA 代码,感谢这篇文章:https://superuser.com/questions/683825/formula-return-cell-defined-name

步骤 2. 使用上述步骤 1 中的 cell_name 进行 Vlookup

B3 到 B5 中的单元格公式 =VLOOKUP(cell_name(),$D$3:$E$8,2,FALSE)

通过应用上述两个步骤,单个单元格确实会按预期返回值,但是,只要工作表中的任何值发生更改,例如将单元格 E7 中的值从 500 更改为 5000,或插入新行,计算就会中断并产生 #不适用 B3:B5

我尝试了 Application.Volatile,但没有成功。

我也尝试使用宏强制重新计算单元格,但也没有按预期工作。

Sub Force_Recalc()
    Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

有什么建议吗?要么改进我现有的功能以按预期工作,要么以更智能的方式实现我想做的事情。

谢谢!

【问题讨论】:

【参考方案1】:

cell_name() 中,使用Application.Caller 而不是ActiveCell

【讨论】:

以上是关于根据命名范围/单元格分配值的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL VBA:根据值范围格式化现有数字单元格

根据单元格值合并范围内的单元格,但最后一个单元格没有被合并

根据相邻单元格中的值填充单元格

根据值更改单元格颜色

如何根据excel电子表格中的指向值在公式中制作动态单元格

引用单元格中列出的命名范围