2017-10-17 9 views
1

私は、間接式と連結を使用して過去3日間のシートのA:A範囲を示す3つのリストを生成しようとしています(例:INDIRECT( " & B2 B2は、トンの名前に等しくなるが、私は前日のシート(例えばの名前を引っ張っする必要が&「"A2" !):セルB2に10-17)相対参照を使用してワークシートのシート名を検索

私が持っています相対的な位置で別のシートでセルの値を見つけることができる機能を働いたが、私は相対的な位置でシート名を取得するように見えることはできません。

Function NextSheet(rCell As Range) 
    Application.Volatile 
    Dim i As Integer 
    i = rCell.Cells(1).Parent.Index 
    NextSheet = Sheets(i + 3).Range(rCell.Address) 
End Function 

シートのシート名を返すことができます別の関数:

Function SheetName(rCell As Range, Optional UseAsRef As Boolean) As String 
    Application.Volatile 
     If UseAsRef = True Then 
      SheetName = "'" & rCell.Parent.Name & "'!" 
     Else 
      SheetName = rCell.Parent.Name 
     End If 
End Function 

しかし、私はそれらを一緒に使用するように見えることはできません(例:NextSheet(SHEETNAME(A2))、またはSHEETNAME(NextSheet(A2) )シート名を相対位置で返すのに使用できる同様の関数はありますか?

二次質問:そのような別のユーザー作成関数内でユーザー作成関数を呼び出すことはできませんか、それとも互いに正しく呼び出されるように正しくセットアップされていませんか?

+0

NextSheetを使用すると、返品として何を期待していますか?現在、参照からページ3のセルの*** VALUE ***を返します。そして、値をRangenameとしてSheetnameに返すことはできません。 –

答えて

0

パート1:
Excelがシートオブジェクトに対して持つ索引付けを使用できます。パート2

:(範囲外の添字エラー9):

Sheets(ActiveSheet.Index + 1).Name 
'or 
Sheets(Sheets("Sheet1").Index + 1).Name 

あなたは最後のシート上でこれをしようとした場合に対処する必要があります。
はいいいえエラートラップで

呼び出しをネストすることができます。 1つからの戻り値は次の値に渡されるので、foo(bar(test(5)))のような関数が有効です

+0

これはうまくいくようですが、VBAのシート(ActiveSheet.Index + 1).Nameをどのように初期化するのですか? –

+0

この関数は文字列を返します。初期化は必要ありません。 'ActiveSheet'の代わりに別のシート参照を使用すると、それがよりうまくいくでしょう – SeanC

関連する問題