「常に隣のシートを参照するにはどうしたらいいのでしょう?」
「前のシートを相対参照するようなことはできないのでしょうか?」
といったご質問をいただくことがあります。
実務では、月ごとにワークシートを作成して前月分と今月分の合計を計算する、といったようなことがよく行われます。
この場合、既存のシートをコピーして新しい月のシートを作成するということが多いわけで、そのときに前月分のシートを参照している数式を修正する必要が出てきます。
これを楽にしたいため、隣のシートを相対参照できないのかという要望をいただくわけです。
セルの相対参照と同じイメージで、常に前月のワークシートのセルを参照することができれば、シートコピー後の修正作業を無くすことができるからです。
残念ながらこの要望をそのまま実現してくれそうなワークシート関数は用意されていないようなので、VBA(Visual Basic for Applications)でユーザー定義関数を作成してみてはいかがでしょう。
Function RefLeftSheet(objCell As Range) As Variant
Application.Volatile
RefLeftSheet = objCell.Parent.Previous.Range(objCell.Address).Value
上記のような実質的には一行のユーザー定義関数で、常に左隣のワークシートを参照できるようになります。
引数に指定されたセル(objCell)の、ParentオブジェクトのPreviousプロパティで、前のシートがわかるので、そこから引数に指定されたセルの値(Range(objCell.Address).Value)を取得しているだけです。
▼サンプルファイル(003281.xls 54KByte)ダウンロード
サンプルファイルの「2月」「3月」シートのB1セルで、上記のRefLeftSheet関数を利用しています。
例えば、「3月」シートの右隣に「3月」シートをコピーして「4月」シートを作成したらどうなるか、などをご確認ください。
- Newer:プラスとマイナスを入れ替える−-#;#;0
- Older:同じ文字を繰り返す書式記号は?−アスタリスク
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 左隣のシートを相対参照