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

时间:2020-06-03 21:23:30

标签: excel vba excel-formula user-defined-functions

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

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

sample

所以我想到的是:

步骤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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

cell_name()中,使用Application.Caller代替ActiveCell

相关问题