参考Excel工作表动态
问题描述:
我有,应该是这么简单的一个问题,但我没有得到我的头周围。我为商店打印价格表,今年他们将零件号码分成5个工作表,而不是一个。参考Excel工作表动态
当用户想打印出一个价码,她进入到= C10,单击工作表“价目表”,并导航到她所需要的零件编号。
为C10得到的式是:=价目表B40
E10必须包含关于部件编号的详细信息,以便E10公式是:= VLOOKUP(C10,价格表B:!N,2,FALSE )
不过,现在新的工作表,她可能会选择工作表“New_Items”在这种情况下为C10所产生的计算公式为:= New_Items B40
我怎么能写E10公式因此T它引用了与C10相同的工作表。
我需要E10 = VLOOKUP(C10,价目表 B:!N,2,FALSE)
自动成为* = VLOOKUP(C10,New_Items B:!N,2,FALSE )*
这有意义吗?这可以让Excel根据另一个单元格的引用修改工作表引用吗?
TIA!
答
是的,你可以做到这一点使用INDIRECT(),因为你需要以某种方式制定出表的名称可能需要一些工作。
=VLOOKUP(C10, INDIRECT(Concatenate(cell-with-sheet-name, "!B:N"),TRUE) ,2,FALSE)
答
你可以使用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)
答
您可以创建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
和使用,这是由涡流所提供的间接公式。
此UDF将让你动态地跟踪VLOOKUP INDIRECT函数内表名称的变化。
您可能需要在其他细胞执行额外的字符串连接,以确定“细胞与表名”的实际值。通过使所有查找工作表尽可能相似,这也可以变得更容易。 – smaclell
“......需要以某种方式计算出工作表的名称。”是的,我需要做的是弄清楚如何从C10中提取工作表名称,并让E10公式引用同一工作表。 INDIRECT可以帮助我吗?另外,所有工作表中的数据都是相同的,所以一旦我超过这个障碍,我就无家可归了。 – Thinkwell
如果启用了vba,一个简单的函数可以使用Cell.Formula解析sheetname并返回它。快速了解UDF的http://www.ozgrid.com/VBA/ExcelIsFormula.htm – Eddy