お忙しいところすみませんが、どなたかご教授下さいましたら幸いです。
まず、現在どのような使用方法かというと以下の通りです。
(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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
Excelのシートを、まとめて表示...
-
EXCEL:同じセルへどんどん足し...
-
エクセルで前のシートを連続参...
-
串刺し計算の中のあるシートを...
-
エクセルVBAでパスの¥マークに...
-
Excelで同じシートのコピーを一...
-
Accessのマクロを使用してExcel...
-
エクセルでファイル保存時に複...
-
エクセルで、売り上げの日計と...
-
複数シートの特定の位置に連番...
-
エクセルの別シートに元シート...
-
前の(左隣の)シートを連続参...
-
EXCEL VBAで別のシー...
-
シートの保護のあとセルの列、...
-
シート名が変更できない 「「○...
-
(Excel)マクロで複数シートを...
-
excelでシート毎の最終更新日を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
Excelのシートを、まとめて表示...
-
エクセルVBAでパスの¥マークに...
-
エクセルでファイルを開いたと...
-
excelでシート毎の最終更新日を...
-
別シート参照のセルをシート毎...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
シートの保護のあとセルの列、...
-
エクセルのシート名をリスト化...
-
VBAでシートコピー後、シート名...
-
EXCELで同一フォーマットのシー...
-
複数シートの特定の位置に連番...
-
エクセルで前のシートを連続参...
-
エクセルで複数設定したハイパーリンク先...
-
シートを追加・名前を次月に変...
おすすめ情報