根据命名范围/单元格分配值
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
。
【讨论】:
以上是关于根据命名范围/单元格分配值的主要内容,如果未能解决你的问题,请参考以下文章