![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お忙しいところすみませんが、どなたかご教授下さいましたら幸いです。
まず、現在どのような使用方法かというと以下の通りです。
(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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelのシートを、まとめて表示...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
Excelで同じシートのコピーを一...
-
EXCEL:同じセルへどんどん足し...
-
MIDで指定するセル番号を、別の...
-
シート1に列挙したNGワードを...
-
EXCELで同一フォーマットのシー...
-
エクセルでファイルを開いたと...
-
Excelマクロで、セルの数式に別...
-
エクセルで前シートを参照して...
-
エクセルで、「1つ前のシート...
-
エクセルで前のシートを連続参...
-
シートの保護のあとセルの列、...
-
VBAで条件によりフォントサイズ...
-
エクセルVBAでパスの¥マークに...
-
[Excel VBA]イベントマクロ上で...
-
シートを任意の日付で自動で作...
-
既存の複数のシート名を一括変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
Excelで同じシートのコピーを一...
-
Excelのシートを、まとめて表示...
-
EXCELで1ヶ月分の連続した日付...
-
Excel、同じフォルダ内のExcel...
-
Accessのスプレッドシートエク...
-
シートの保護のあとセルの列、...
-
複数シートの特定の位置に連番...
-
特定のシートの削除を禁止した...
-
エクセル 計算式も入っていない...
-
複数シートの色付きセルがある...
-
EXCELで同一フォーマットのシー...
-
excelでシート毎の最終更新日を...
おすすめ情報