动态引用Excel工作表

时间:2011-08-19 23:52:36

标签: excel-2007 excel-formula

我有一个应该如此简单的问题,但我并没有理解它。我为商店打印了价格表,今年他们将零件编号分成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!

3 个答案:

答案 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函数中动态跟踪工作表名称更改。