- ベストアンサー
Excel2003のVBAで複数シートでマクロを実行する方法
- Excel2003のVBAで1つのマクロを複数のシートで実行したいですが、方法が分かりません
- 具体的には、指定したシート(例:シート2,5,8)でマクロを実行したいです
- VBA初心者ですので、1文ごとに簡単なコメントや参考書やURLも教えていただきたいです
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
NO2です。 一例です。 全シートを検索して対象のシート("Sheet2", "Sheet5", "Sheet8")に日付を展開します。 Sub カレンダー作成2() Dim 日付, i As Integer 日付 = Application.InputBox _ ("yyyy/m 形式の年月を半角で入力してください" & Chr(10) _ & " 例)2013年の1月 → 2013/1") If 日付 = False Or IsDate(日付) = False Then Exit Sub For i = 1 To Sheets.Count With Sheets(i) Select Case .Name Case "Sheet2", "Sheet5", "Sheet8" .Range("G5").Resize(, 31).ClearContents .Range("C3,G5").Value = DateSerial(Year(日付), Month(日付), 1) .Range("G5").AutoFill Destination:=.Range("G5"). _ Resize(, Day(DateSerial(Year(日付), Month(日付) + 1, 0))) End Select End With Next End Sub
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! すでにマクロがありますので、 >1つのマクロを複数のシートで実行したいのですが・・・ とありますが、別マクロを標準モジュールに作り、今のマクロを実行させる方法はどうでしょうか? Alt+F11キー → すでにあるマクロの下に下のコードをコピー&ペーストして 追加した「複数Sheet操作」マクロを実行してみてください。 Sub 複数Sheet操作() Dim k As Long, str As String, myArray str = Application.InputBox("操作したいSheet番号を" & vbCrLf & _ "2,4,5のようにカンマ区切りで入力してください。") 'インプットボックスにカンマ入力があれば If InStr(str, ",") > 0 Then 'カンマで入力値を区切って、格納する myArray = Split(str, ",") 'カンマで区切った最初の文字~最後の文字まで For k = 0 To UBound(myArray) 'k番目のSheetをactiveに Worksheets(Val(myArray(k))).Activate 'マクロを実行 Call カレンダー作成G5 '次のSheetに! Next k 'インプットボックスにカンマ入力がない場合(一つのSheetのみに場合) Else 'アクティブなSheetにマクロを実行 Call カレンダー作成G5 End If End Sub こんな感じではどうでしょうか?m(_ _)m
お礼
ご連絡が遅くなってしまい、申し訳ありません。 また、非常に丁寧なコメントまで掲載していただき、 重ねて御礼申し上げます。 「なるほど!」の一言に尽きます。感服いたしました。 こういった方法もあるのですね。1つの目的に対して、 さまざまなアプローチの仕方があるのだと、今回お教え いただいた内容を拝見し、思いました。 まだまだVBAに対して、駆け出しどころか「準備運動」の 状態ですので、しっかりと勉強したいと思います。 貴重なお時間をいただき、ご教授いただきまして、 本当にありがとうございました。今後もVBA関連で質問させて いただくことがあると思います。この名前を見たときには、 ぜひまたよろしくお願いいたします。
- mu2011
- ベストアンサー率38% (1910/4994)
>1つのマクロを複数のシートで実行したい ⇒各シートで実行したいのなら、標準モジュールに登録して、対象シートをアクティブにして実行すればOKです。 それとも1回の年月入力で複数の固定シートに同一カレンダを展開したいのでしょうか。
お礼
コメントいただきありがとうございます。 心よりお礼申し上げます。 その上で、お教えください。 >それとも1回の年月入力で複数の固定シートに同一カレンダを >展開したいのでしょうか。 ⇒ご推察の通りです。まさに仰っている形にしたいのですが、 お恥ずかしい話なのですが、 私の知識では到底できるはずがない状況でございます。 もしも可能であれば、質問させていただいた記述に対して、 付記していただく形で、ご教授願えないでしょうか? ご面倒をおかけすることを承知で、ご無理を申し上げております。 ぜひとも、よろしくお願いいたします。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
マクロは標準モジュールだとして、activesheet.nameにより実行を制御すればイイのでは??
お礼
コメントいただきありがとうございます。 心よりお礼申し上げます。 その上で、さらにご教授いただきたく。 >マクロは標準モジュールだとして、activesheet.nameにより >実行を制御すればイイのでは?? ⇒ 仰るとおり、マクロは標準モジュールに設定されています。 後半部の「activesheet.nameにより~」の部分が、 申し訳ありません。よく・・・分かりません。 大変お手数だとは思うのですが、私が記述いたしました 内容に「追記」していただく形で、ご教授願えないでしょうか? ぜひとも、よろしくお願いいたします。
お礼
ご連絡が遅くなってしまい、本当に申し訳ありません。 できました!感動です!すごいです! 正直に申し上げて、内容理解にはまだ時間がかかりますが、 いずれにしましても、解決いたしました。 本当にありがとうございます。数ある質問の中で、私が 掲載した質問に目を留めていただけた事に深く感謝いたします。 今後も引き続き、色々と質問を掲載する機会があるとは 思いますが、ご縁がありましたらぜひまたお願いいたします。