我要根据当前单元格名称分配当前单元格值。
例如,(请参阅工作表图像)单元格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中的N / A
我尝试了Application.Volatile,但是没有用。
我还尝试了使用宏强制重新计算单元格,但也没有按预期工作。
Sub Force_Recalc()
Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
有什么建议吗?要么改善我现有的功能以使其按预期工作,要么以更明智的方式实现我想做的事。
谢谢!
答案 0 :(得分:2)
在cell_name()
中,使用Application.Caller
代替ActiveCell
。