以下の予定表は、セルC2に配置されたスピンボタンを押すことで、1週間単位で表示する日付を切り替えることができます。

※こちらで実現したファイルは、記事の最後にて配布しています。
こちらは、実際の値が置き換わっている訳ではなく、対象の週以外の列が非表示になっています。

そのため、表示されているセルに直接値を入力しても問題ございません。
今回は、上記のように、スピンボタンで表示する列を一定間隔で切り替える仕組みを実現していきます。
1. スピンボタンの用意
今回は、以下のすべての列が表示されている予定表から作成していきます。

まずは、スピンボタンを用意します。
スピンボタンは、[開発]タブの中の[挿入]から[スピンボタン]を選択することで、好みの位置に配置することができます。

スピンボタンの用意ができたら、スピンボタンの上で右クリックし、[コントロールの書式設定]を選択します。

[コントロールの書式設定]にて、以下のように設定します。

スピンボタンで指定した数値が、予定表の表示する週になります。
[最大値]を50にすると、最大50週目までしか表示できなくなります。
そのため、必要に応じて[最大値]は修正してください。
[リンクするセル]は、スピンボタンの現在値を表示させるセルになります。
こちらでは、スピンボタンの隣のセルB2を指定しています。
2. 開発準備
次は、スピンボタンをクリックすると同時に、予定表の週の表示を切り替える仕組みを実現します。
そのためには、VBAを活用します。
スピンボタンに連動する機能を開発する必要があるため、スピンボタンの上で右クリックし、[マクロの登録]を選択します。

[マクロの登録]の画面にて、開発する機能の名前を入力し、[新規作成]を選択します。
こちらでは、「表示切替」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。

3. コードの記述(列の表示切り替え)
以下のコードを記述します。
Sub 表示切替()
Dim no As Long
no = Range("B2").Value
Columns("D:MY").Hidden = True
Range( _
Columns(no * 7 - 3), _
Columns(no * 7 + 3)).Hidden = False
End Sub
では、コードについて解説していきます。
Dim no As Long
no = Range("B2").Value
「no」という整数(Long)専用の変数(入れ物)を用意し、その「no」にセルB2の値(表示する週を表す数値)を格納しています。
Columns("D:MY").Hidden = True
予定表の日付の列全体を非表示にしています。

Range( _
Columns(no * 7 - 3), _
Columns(no * 7 + 3)).Hidden = False
「no」の値から対象の週を指定し、対象の週の列を表示しています。
「no」が1のときは、1週目である4列目から10列目を表示し、
「no」が2のときは、2週目である11列目から17列目を表示します。
この関係性を「no」を用いた数式で表すと、「no * 7 – 3」列目から「no * 7 + 3」列目になります。

そのため、「Range」で「Columns(no * 7 – 3)」から「Columns(no * 7 + 3)」と対象の列の範囲を指定しています。
4. 完成
以上の手順で完成です。
スピンボタンを押すことで、対象の週のみが表示されるようになります。

▼サンプルファイル▼





























































