繁体   English   中英

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

[英]Assign value based on named range/cell

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

例如,(参见工作表图像)单元格 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

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

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM