excel - 根据命名范围/单元格分配值
问题描述
我想根据当前单元格名称分配当前单元格值。
例如,(参见工作表图像)单元格 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
。
推荐阅读
- firebase - Firebase Firestore 对“where”快照侦听器查询的计费方式如何?
- mysql - “group by”中最长字符串的ID
- r - 接收错误:“未知随机参数”,在 mlogit() [随机参数 logit 模型] 中定义 rpar 时
- google-analytics-4 - GA4:是否可以为 view_search_result 等自动事件添加自定义参数?
- android - Android 可组合,BasicCodelabTheme 显示错误
- python - Python:嵌套 For 循环以查找列表中元素的差异 --> 一个循环测试并附加到输出列表
- google-sheets - 使用 Importrange 合并多个 Google Workbook
- python - 连接地理数据框中的 2 个点以创建一系列 LineStrings
- c++ - C++ 作业 - 使用动态数组重载 >> 运算符
- javascript - DOM 操作 HTML - 嵌套在按钮标签内的图标