首页 > 解决方案 > 根据命名范围/单元格分配值

问题描述

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

例如,(参见工作表图像)单元格 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,或插入新行,计算就会中断并产生 #N/As在 B3:B5

我试过 Application.Volatile,但没有用。

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

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

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

谢谢!

标签: excelvbaexcel-formulauser-defined-functions

解决方案


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


推荐阅读