初めて質問をさせていただきます。文面など、分かりにくい部分も
多々あるかと思いますが、ご容赦ください。
Excel2003のVBAで1つのマクロを複数のシートで実行したいのですが、
上手くできません。過去のQAも拝見しているのですが、
思うように動かずです。
具体的には
Sub カレンダー作成G5()
Dim 日数 As Long
Dim 日付 As Variant
Dim 月 As Integer, 年 As Integer
Dim 入力セル As Range
日付 = Application.InputBox _
("yyyy/m 形式の年月を半角で入力してください" & Chr(10) _
& " 例)2013年の1月 → 2013/1")
If 日付 = False Or IsDate(日付) = False Then
Exit Sub
End If
月 = Month(日付)
年 = Year(日付)
Range("c3").Value = DateSerial(年, 月, 1)
Range("G5:Ak5").Select
Selection.ClearContents
日数 = 0
For Each 入力セル In Selection
入力セル.Formula = "=$c$3+" & 日数
日数 = 日数 + 1
If 月 <> Month(Range("c3") + 日数) Then Exit For
Next
End Sub
です。これを、1ブックのシートが1~10ある中から、例えば「シート2,5,8」と言った具合に、
複数のシートで実施したいのです。
(選択するシートは固定ですが、今後のシートの追加は、可能であれば想定したいです。)
なお、この記述も、前任者の記述であり、当方はまったくの未経験者とご認識ください。
従いまして、後学の為、1文ごとに簡単なコメントなどをいただけますと、本当にありがたく。
(さらに欲を申し上げますと、VBA初心者にお勧めの参考書やURLもご紹介いただけますと幸いです。)
また、OKwaveのシステムも理解できておりませんので、お礼も言葉のみとなってしまいます。
その点も、ご理解いただけますと幸いです。
ぜひとも「無知な人間に勉強する機会を」いただけましたらと思います。
有識者のみなさま、ご指導をよろしくお願いいたします。
No.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
ご連絡が遅くなってしまい、本当に申し訳ありません。
できました!感動です!すごいです!
正直に申し上げて、内容理解にはまだ時間がかかりますが、
いずれにしましても、解決いたしました。
本当にありがとうございます。数ある質問の中で、私が
掲載した質問に目を留めていただけた事に深く感謝いたします。
今後も引き続き、色々と質問を掲載する機会があるとは
思いますが、ご縁がありましたらぜひまたお願いいたします。
No.3
- 回答日時:
こんにちは!
すでにマクロがありますので、
>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関連で質問させて
いただくことがあると思います。この名前を見たときには、
ぜひまたよろしくお願いいたします。
No.2
- 回答日時:
>1つのマクロを複数のシートで実行したい
⇒各シートで実行したいのなら、標準モジュールに登録して、対象シートをアクティブにして実行すればOKです。
それとも1回の年月入力で複数の固定シートに同一カレンダを展開したいのでしょうか。
コメントいただきありがとうございます。
心よりお礼申し上げます。
その上で、お教えください。
>それとも1回の年月入力で複数の固定シートに同一カレンダを
>展開したいのでしょうか。
⇒ご推察の通りです。まさに仰っている形にしたいのですが、
お恥ずかしい話なのですが、
私の知識では到底できるはずがない状況でございます。
もしも可能であれば、質問させていただいた記述に対して、
付記していただく形で、ご教授願えないでしょうか?
ご面倒をおかけすることを承知で、ご無理を申し上げております。
ぜひとも、よろしくお願いいたします。
No.1
- 回答日時:
マクロは標準モジュールだとして、activesheet.nameにより実行を制御すればイイのでは??
コメントいただきありがとうございます。
心よりお礼申し上げます。
その上で、さらにご教授いただきたく。
>マクロは標準モジュールだとして、activesheet.nameにより
>実行を制御すればイイのでは??
⇒ 仰るとおり、マクロは標準モジュールに設定されています。
後半部の「activesheet.nameにより~」の部分が、
申し訳ありません。よく・・・分かりません。
大変お手数だとは思うのですが、私が記述いたしました
内容に「追記」していただく形で、ご教授願えないでしょうか?
ぜひとも、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft365で提供しているアプリ
-
英数字のみ全角から半角に変換
-
【マクロ】違うブックのCallス...
-
Excel テーブル内の空白行の削除
-
outlookのメールが固まってしま...
-
会社PCのメールが更新されない
-
Office2021を別のPCにインスト...
-
バソコンが二台とも壊れ後換装...
-
マイクロソフト 一時使用コード...
-
office365って抵抗感ないですか?
-
エクセルで英文字に入れた下線...
-
Outlook 電源OFFの受診の仕方
-
別シートの年間行事表をカレン...
-
マイクロソフト365の「無料でサ...
-
パソコン画面の中の小さい画面...
-
teams設定教えて下さい。 ①ビデ...
-
みつも朗ってソフトはなにがで...
-
マクロ自動コピペ 貼り付ける場...
-
Microsoft Formsの「個人情報や...
-
エクセルの貼り付け「リンクさ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
outlookのメールが固まってしま...
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
大学のレポート A4で1枚レポー...
-
Officeを開くたびの「再起動メ...
-
Microsoft Formsの「個人情報や...
-
one drive使えるpcを買う
-
マクロ自動コピペ 貼り付ける場...
-
PDFのハイパーリンクを自動的に変更し...
-
あらかじめ用意したテンプレー...
-
別シートの年間行事表をカレン...
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
office365って抵抗感ないですか?
-
ステータスバーの合計に表示さ...
-
【スプレドシート】IF関数の複...
-
Teamsで課題を提出します。 画...
-
Outlook で宛先が複数の場合の人数
-
Microsoft Officeを2台目のPCに...
おすすめ情報