1478330882 VBAについての質問です。


エクセルで作成した前期(4月~9月)、後期(10月~3月)というBOOKがあります。
シートにそれぞれ月ごとの名前がついています。

下記の画像のようにセルC9に9、C4に1を入力した場合、
9・10・11・12・1のシートが選択されるマクロがありましたら教えてください。
初心者です。宜しくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/11/05 16:28:02
  • 終了:2016/11/12 16:30:03
id:kokki0201

セルC9ではなくC3です。

回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4521ベストアンサー獲得回数18792016/11/05 23:52:11

月を入力するシートが選択されている状態で、以下のサブルーチンを実行してください。

Sub select_sheet()
    Dim m_sheets() As String
    m_start = Cells(3, 3)   ' C3
    m_finish = Cells(4, 3)  ' C4
    n = m_finish - m_start + 1
    If n < 1 Then
        n = n + 12
    End If
    ReDim m_sheets(n - 1)

    i = 0
    m = m_start
    m_sheets(i) = m & "月"
    If m_start <> m_finish Then
        Do
            i = i + 1
            m = m + 1
            If m > 12 Then
                m = 1
            End If
            m_sheets(i) = m & "月"
        Loop Until m = m_finish
    End If

    Sheets(m_sheets).Select
End Sub

シートの名前が「1月」というようなのを前提にしています。

id:jccrh1 No.2

jccrh1回答回数111ベストアンサー獲得回数192016/11/06 09:42:07

◆開始月・終了月は引数にした方が汎用性が出て使いやすいかと思います。
◆開始月・終了月は1~12以外にするとプログラム・ループを起こします。
 ご注意ください。

Sub テスト()
  Call 月シート選択(Range("C3"), Range("C4"))
End Sub

Sub 月シート選択(開始月 As Long, 終了月 As Long)
  Dim 選択シート年月日  As Date
  Dim シート名          As String
  選択シート年月日 = DateSerial(2016, 開始月, 1)
  Do
    シート名 = Month(選択シート年月日)
    Sheets(シート名).Select Val(シート名) = 開始月
    If Month(選択シート年月日) = 終了月 Then Exit Do
    選択シート年月日 = DateAdd("m", 1, 選択シート年月日)
  Loop
End Sub
  • id:ken3memo
    ひっかけ問題じゃないとは思いますが、
    一点確認したいので、コメントします。

    >前期(4月~9月)、後期(10月~3月)というBOOKがあります。
    もしかして、
    前期.xls にシートが4月~9月で6シート
    後期.xls にシートが10月~3月で6シート
    みたいに、ブックが2つなんてことはないですよね。

    一つのブックに
    範囲指定用のシートと
    1から12月のシート
    ですよね。

    勘違いだったらスルーしてください。少し気になったのでコメントで失礼しました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません