2011-08-19 54 views
9

我有,应该是这么简单的一个问题,但我没有得到我的头周围。我为商店打印价格表,今年他们将零件号码分成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!

回答

12

是的,你可以做到这一点使用INDIRECT(),因为你需要以某种方式制定出表的名称可能需要一些工作。

=VLOOKUP(C10, INDIRECT(Concatenate(cell-with-sheet-name, "!B:N"),TRUE) ,2,FALSE) 
+0

您可能需要在其他细胞执行额外的字符串连接,以确定“细胞与表名”的实际值。通过使所有查找工作表尽可能相似,这也可以变得更容易。 – smaclell

+0

“......需要以某种方式计算出工作表的名称。”是的,我需要做的是弄清楚如何从C10中提取工作表名称,并让E10公式引用同一工作表。 INDIRECT可以帮助我吗?另外,所有工作表中的数据都是相同的,所以一旦我超过这个障碍,我就无家可归了。 – Thinkwell

+0

如果启用了vba,一个简单的函数可以使用Cell.Formula解析sheetname并返回它。快速了解UDF的http://www.ozgrid.com/VBA/ExcelIsFormula.htm – Eddy

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)

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 

和使用,这是由涡流所提供的间接公式。

此UDF将让你动态地跟踪VLOOKUP INDIRECT函数内表名称的变化。