Home > Excel VBA Macro フロー制御 > FAQ

指定された月のデータだけをコピーするには?

Question 22.3 Previous Next
こんにちは。EXCELのVBAマクロを作ろうといろいろやっているのですがなかなかうまくいってくれません。マクロ関係のホームページをいろいろ検索し、「すぐに役立つエクセルVBAマクロ集」を見つけました。いろいろと参考にさせて頂いてるのですが、どうにも今ひとつ自分が探しているようなものではありませんでした。
もし何かよいアドバイスでも頂ければと思い、ずうずうしくも質問させて頂きました。

質問:当月毎に処理を振り分けるには?
4月なら4月の、5月なら5月の処理をさせたい。下のような感じで作ってますが、これだと月を判断できず4月から1月まで連続して処理してしまいます。どのようにしたらよいでしょうか?
   (注)行番号を回答用に付け加えました
'------------------------------------------------------------------------------
Sub Macro2()
1   If Range("E3") = 4 Then
2   GoTo SUB1:
3   ElseIf Range("E3") = 5 Then
4   GoTo SUB2:
0.208333333333333
0.25
0.291666666666667
8   End If

9 SUB1:     '4月
10  Range("B47:B67").Select
11  Selection.Copy
12  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
13  ActiveSheet.Paste
14  Application.CutCopyMode = False
15  Range("A1").Select

16 SUB2:    '5月
17  Range("C47:C67").Select
18  Selection.Copy
0.791666666666667
0.833333333333333
End Sub
'-----------------------------------------------------------------------------
Answer   Copyright (C) 1999.11.11 永井善王
If~Then~Elseと、GoTo文を組み合わせて処理しようとされていますね。
4月ならば 9~15行目の処理だけを実行して、このSubプロシージャを終えればよいのでしたら、15行目と16行目の間に 「Exit Subステートメント」を追加してみてください。書き方は次のとおりで、ほかの月も同様に追加します。
15  Range("A1").Select
    Exit Sub
16 SUB2:    '5月
Exit Subステートメントは、そのSubプロシージャをただちに抜け出して、そのSubプロシージャを呼び出したステートメントの次のステートメントを実行します。 または、そのSubプロシージャだけを実行している場合は、マクロの実行を終ります。
蛇足かも知れませんが、9行目の「SUB1:」と16行目の「SUB2:」は行ラベルで、Subプロシージャではありません。
Subプロシージャは、最上行の「Sub Macro2()」から、最下行の「End Sub」までになります。

あなたのマクロを整理して、すぐに試せるようにしておきました。 Internet Explorer 4.0以上と、Excel95以上がインストールされたパソコンで、このHPを見ているのでしたら、
ここをクリック すればエクセルが起動して、サンプルブックが開きます。
なお、月により、あるいは店舗により処理を変えることは、実務では、しばしば行われることかと思われます。 このようなフロー制御について 「On..GoToステートメント」を使う方法などを
ここから 見ることができます。参考にしてください。

 

Excel VBA Macro

Excel DownLoad