0

以前のワークシートから範囲をインポートできる関数を使用しようとしています。現在のマクロでこれが許可されているかどうかはわかりません。前のワークシートを手動で呼び出すことはできますが、私が持っている関数を使用することはできません。

ワークシート名を手動で入力すると正常に動作する関数は次のとおりです。

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

これが私が使おうとしている関数です:

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

これは、NextSheetNameマクロに使用しているVBAです。

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

私は何が間違っているのですか?別のワークシートから範囲を動的に選択するためのより良い方法はありますか?

4

2 に答える 2

3

これを試して、関数の出力を修正できるかどうかを確認してください。

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

次に、次のような間接関数内で出力を連結する必要があります。

=IFERROR(VLOOKUP(D3,INDIRECT(NextSheetName() & "$D$3:$F$50"),3, FALSE),"")
于 2012-08-13T18:30:05.397 に答える
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 シートだけオフセットします。たとえば、i=0 は同じシートを意味し、i=-1 は前のシートを意味し、i=1 は次のシートを意味します。

あなたの例では、次を使用します。

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

次のワークシートを参照する範囲をオフセットします。

現在のシート (自分のシートなど) に関連する参照を作成するには、ワークシートを指定しないことに注意してください。絶対参照を作成するには、参照でワークシートを指定するだけで (例: 'Sheet1'!$D$3:$F$50)、それが元になります (i=0 のときに参照されるシート)。

于 2014-01-22T21:23:07.103 に答える