2012-08-13 104 views
0

我想使用一個函數,將允許我從以前的工作表中導入一個範圍。我不確定我目前的宏是否允許這樣做。我可以手動調用以前的工作表,但不能使用我擁有的功能。VLookup範圍在另一個工作表動態

這裏是一個正常工作的功能時,我手動輸入工作表名稱:

=IFERROR(VLOOKUP(D3,Aug9Daily!$D$3:$F$50,3, FALSE),"") 

這裏是我在嘗試使用的功能:

=IFERROR(VLOOKUP(D3,NextSheetName()$D$3:$F$50,3, FALSE),"") 

這是VBA,我我正在使用NextSheetName宏:

Function NextSheetName(Optional WS As Worksheet = Nothing) As String 
    Application.Volatile True 
    Dim S As String 
    Dim Q As String 
    If IsObject(Application.Caller) = True Then 
     Set WS = Application.Caller.Worksheet 
     If WS.Index = WS.Parent.Sheets.Count Then 
      With Application.Caller.Worksheet.Parent.Worksheets 
       Set WS = .Item(1) 
      End With 
     Else 
      Set WS = WS.Next 
     End If 
     If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then 
      Q = "'" 
     Else 
      Q = vbNullString 
     End If 
    Else 
     If WS Is Nothing Then 
      Set WS = ActiveSheet 
     End If 
     If WS.Index = WS.Parent.Worksheets.Count Then 
      With WS.Parent.Worksheets 
       Set WS = .Item(1) 
      End With 
     Else 
      Set WS = WS.Next 
     End If 
     Q = vbNullString 
    End If 
    NextSheetName = Q & WS.Name & Q 
End Function 

我在做什麼錯?有沒有更好的方法來動態地從另一個工作表中選擇範圍?

+0

您得到了什麼錯誤消息? – PowerUser 2012-08-13 18:27:46

+0

如果我按上面所述輸入它,則表示您鍵入的公式包含錯誤。如果我在引號內輸入範圍,NextSheetName($ D $ 3:$ F $ 50),3,FALSE),我得到一個空白單元格(不應該是空白) – rupes0610 2012-08-13 18:29:58

回答

3

試試這個,看看它是否適合你解決你的函數的輸出:

NextSheetName = Q & WS.Name & Q & "!" 

,然後你將需要concatinate間接功能這樣的內部輸出:

=IFERROR(VLOOKUP(D3,INDIRECT(NextSheetName() & "$D$3:$F$50"),3, FALSE),"") 
+0

它工作了!!!!!謝謝你太多了! – rupes0610 2012-08-13 18:33:54

+0

不客氣。 – danielpiestrak 2012-08-13 18:34:38

+0

+ 1很好完成:) – 2012-08-13 18:35:39

0

我發現這個小UDF很方便:

Function sheet_offset(rng As Range, i As Integer) As Range 
    Application.Volatile 'necessary since value can change even when values of parameters do not 
    Set sheet_offset = rng.Worksheet.Parent.Worksheets.Item(rng.Worksheet.Index + i).Range(rng.Address) 
End Function 

哪些偏移rng的i表 - 例如,我= 0表示同一張紙,i = -1表示上一張紙,而i = 1表示下一張紙。

在你的榜樣,你會使用:

IFERROR(VLOOKUP(D3,sheet_offset($D$3:$F$50,1),3, FALSE),"") 

這將抵消範圍內引用下一個工作表。

請注意,要使相對於當前工作表的引用(如yours)不會指定工作表。要做絕對引用,只需在引用中指定一個工作表(例如'Sheet1'!$ D $ 3:$ F $ 50)並且成爲您的原點(當i = 0時引用該工作表)

相關問題