[英]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.