
お忙しいところすみませんが、どなたかご教授下さいましたら幸いです。
まず、現在どのような使用方法かというと以下の通りです。
(1)エクセルブック1枚で30名ほどのスタッフの日にちごとの1ヶ月間のスケジュール管理をしています
(2)予定を作成した日にちをシートに"2009/8/28"とふる
(3)翌日にはシートをコピーし(土日は行わないことがある)、変更になった箇所のみを変更し、シートを"2009/8/29"とふる
そして、当方が自動でしたい事は上記(3)の翌日になった場合若しくはブックを開いた際に、自動で前日若しくは直近の日付のシート(土日は更新しないので、土日の日付が入力されているシートがないため)をコピーしシート名を当日(YYYY/MM/DD)とふる。しかし、当日にエクセルを何回も開いたり閉じたりするので、その際に何回も当日のシートが自動作成されては困る。
以上となります。どうぞ宜しくお願い致します。
No.5ベストアンサー
- 回答日時:
こんばんは
#1のrukukuです。
ryouta0429さんが、何とかやってみようと、いろいろと質問して頑張ってらっしゃるところなので、こんなことを言って申し訳ないのですが、
>配車担当者である1人のスタッフが他の事務職用に作成しております。
この担当の方に「シートのコピーと名前の変更」を教える、が一番手っ取り早いと思います。
1日1回の簡単な操作ですので、手作業で十分だと思います。
そう言っても、何か新しいことを学ぶにはきっかけが必要です。ryouta0429さんにとってマクロを学ぶきっかけになれば幸いと思い、少し補足します。
>Workbook_Open
これが、私が#1で回答した「ブックを開いたときにマクロを実行できます。」という方法です。Excelのでは、「イベント」を引き金にマクロを実行することが出来ます。
・セルの内容が書き換えられた
・別のセルが選択された
・シートがアクティブになった
など、様々なタイミングでマクロを実行することが出来ます。
「Workbook_Open」はブックが開かれたときに実行されるマクロです。
>Format関数
Excelの基本機能なら「表示形式」、関数なら「TEXT」が近いかと思います。Excelの場合、実際に持っているデータと表示されているデータが異なることがあります。特に「日付」それから「時刻」は「シリアル値」という表示されているのと全然別な形でデータを持っています。
そのようなデータを指定した形式で得るための関数です。
>Exit Sub
「自分の所属するプログラムの実行を停止せよ」という命令です。
一定の条件を満たしたときにプログラムの実行を停止させるときによく使います。
ご質問の例で言えば、シート名を一つ一つチェックしていって、同名のソートが見つかったら、未チェックのシート名を確認する意味はありません。そこで、同名のシートが見つかった時点でプログラムの実行を停止します。(ご質問の例の場合、最大で31のシートをチェックするだけですので、End Subなしでも処理時間はそんなに変わらないと思います。)
>右端にあるなら「Worksheets(Worksheets.Count)」
>左端なら「Worksheets(1)」
シートを特定するために、シートの順番を使うことが出来ます。一番左側のシートが、「Worksheets(1)」になります。以下順番に、左から二番目が「Worksheets(2)」…となっていきます。
そして、Worksheets(Worksheets.Count)ですが、「“ワークシート数”番目」という意味になります。ワークシートが3枚あれば左から3番目のワークシート、ワークシートが7枚あれば左から7枚目のワークシートになります。
(ホントはWorksheetsとSheetsの違いがあるのですが、ここでは説明のためWorksheetsを使います。)
No.3
- 回答日時:
先ほどのrukukuさんの回答に対するご返事をみるとVBAは全く使われたことがなさそうです。
「オープンしたときに自動的に」というのはこれから勉強していただくとして
「オープンした後明示的に今日のシートを作る」ところからはじめてはいかがでしょう。
Sub 当日シート作成()
Dim shname As String
Dim sdate As Date
' 今日の日付を取得
sdate = Now()
' 日付からシート名を生成 2008/8/30→20080830
shname = Year(sdate) & Right("00" & Month(sdate), 2) & Right("00" & Day(sdate), 2)
' 今注目しているシートのコピーをすぐ右側にコピー
ActiveSheet.Copy after:=ActiveSheet
' 今コピーしてできたシートに名前を付ける
ActiveSheet.Name = shname
End Sub
bookを開いた後前日のシートを開き上記のコードを実行すれば前日のシートの右に今日のシートができます。
コードの入力(VBE)や実行は自分で調べてください。
No.2
- 回答日時:
「Workbook_Open()」に、
(1)当日のシート名の存在チェックを行う(*)
(2)シートがあれば、「Exit Sub」
(3)なければ、直近のシート(**)のコピー
という処理を記述することになるでしょう。
(*)
・当日のシート名の作成方法:Format関数を使います。ちなみにシート名に「/」は使えませんので「yyyy-mm-dd」などとしましょう。
・シートの存在チェック:
http://www.nurs.or.jp/~ppoy/access/excel/xlM027. …
などを参考にしてください。
(**)
・直近のシート名の取得方法:
常に最新のシートが右端にあるなら「Worksheets(Worksheets.Count)」、左端なら「Worksheets(1)」で取得できます。
位置が固定でないなら、最大の日付を探す処理が必要です。上記URLが参考になるでしょう。
シートコピーをマクロ記録し、上記の処理を行うよう修正してみてください。
この回答への補足
こんばんは
早々にご教授誠にありがとうございます。
せっかくご教授いただいているのですが、当方エクセルは多少分かるのですが、マクロの事が分からないため、以下の語句の意味等が分かりません。
・Workbook_Open
・Format関数
・Exit Sub
・右端にあるなら「Worksheets(Worksheets.Count)」
・左端なら「Worksheets(1)」
お手数をおかけしますが、再度ご教授いただけましたら幸いです。
No.1
- 回答日時:
こんにちは
マクロ(VBA)を使えば出来ます。
>ブックを開いた際に、自動
ブックを開いたときにマクロを実行できます。
>何回も当日のシートが自動作成されては困る
シートをコピーする前に、既に存在しているかのチェックも出来ます。
が、実際に運用するとなると、入力する人の誤操作の対応も含めたプログラムを組まなければならないので大変です。
・なぜ「1日1シート」にしているのか
・特定の人が入力を行うのか、約30名のスタッフが個別に入力をしているのか。
・実際に入力しているデータの例(社名・氏名は伏せ字でも構いません)
を教えてください。
場合によってはもっといい解決策が見つかるかもしれません。
この回答への補足
こんばんは
早々にご教授誠にありがとうございます。
お問い合わせの件ですが、
・「1日1シート」にしている理由は、ある日作成したスケジュールはどうだったかを残しておく為に、毎日スケジュールを上書きせず、別シートに作成をしていっております。(無駄かもしれませんんが・・・)
・約30名のスケジュール表は、特定のスタッフのみが作成をしております。約30名はドライバーであって、どこへ行くかを、配車担当者である1人のスタッフが他の事務職用に作成しております。
・実際に入力しているデータを見ていただきたかったのですが、どのように見ていただければ良いか、方法がわかりません。
どうぞ宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- その他(Microsoft Office) エクセルの休日について教えてください。 1 2023/01/06 15:45
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) Excelでのデータ管理 6 2022/12/24 09:33
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
特定のシートの削除を禁止した...
-
シート番号からシート名を取得する
-
EXCEL:同じセルへどんどん足し...
-
シートの保護のあとセルの列、...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
複数シートの色付きセルがある...
-
エクセル 計算式も入っていない...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
エクセルで前のシートを連続参...
-
エクセルのシート名をリスト化...
-
VBAでシートコピー後、シート名...
-
シートを追加・名前を次月に変...
-
エクセルで毎回1枚目のシートを...
-
エクセルVBA 串刺し計算の際、...
-
シート名ではなく、相対位置で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
エクセルでファイルを開いたと...
-
エクセル 計算式も入っていない...
-
エクセルで前のシートを連続参...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセルVBAでパスの¥マークに...
-
シートの保護のあとセルの列、...
-
Excel、同じフォルダ内のExcel...
-
エクセルのシート名をリスト化...
-
シート番号からシート名を取得する
-
Excelのシートを、まとめて表示...
-
EXCELで1ヶ月分の連続した日付...
-
excelでシート毎の最終更新日を...
-
エクセルで毎回1枚目のシートを...
おすすめ情報