我有一个应该如此简单的问题,但我并没有理解它。我为商店打印了价格表,今年他们将零件编号分成5个工作表而不是一个。
当用户想要打印出价格时,她将=输入到C10,点击工作表“价目表”并导航到她需要的部件号。
C10的最终公式是: =价格表!B40
E10必须包含有关零件编号的更多信息,因此E10公式为: = VLOOKUP(C10,价目表!B:N,2,FALSE)
但是,现在使用新的工作表,她可能会选择工作表“New_Items”,在这种情况下,C10的结果公式为: = New_Items!B40
如何编写E10的公式,使其引用与C10相同的工作表。
我需要E10 = VLOOKUP(C10,价目表!B:N,2,FALSE)
自动成为* = VLOOKUP(C10, New_Items !B:N,2,FALSE)*
那有道理吗?是否可以让Excel根据另一个单元格的引用修改工作表引用?
TIA!
答案 0 :(得分:12)
是的,您可以使用INDIRECT()执行此操作可能需要一些工作,因为您需要以某种方式计算工作表的名称。
=VLOOKUP(C10, INDIRECT( Concatenate(cell-with-sheet-name, "!B:N"),TRUE ) ,2,FALSE)
答案 1 :(得分:0)
你能用vba吗?
如果是这样,试试这个简单的udf
Function MyLookup(ref As Range, Offset as Long) As Variant
MyLookup = Range(ref.Formula).Offset(0, Offset)
End Function
单元格E10 =MyLookup(C10, 1)
答案 2 :(得分:0)
您可以创建VBA UDF
Function GetShtNm(rng As Range) As String
Application.Volatile
If InStr(1, rng.Formula, "!") = 0 Then
GetShtNm = vbNullString
Else
GetShtNm = Mid$(rng.Formula, 2, InStr(1, rng.Formula, "!") - 2)
End If
End Function
并使用这是Eddy提供的间接公式。
此UDF将允许您在VLOOKUP INDIRECT函数中动态跟踪工作表名称更改。