• ベストアンサー

VBA 一年に一度だけ実行するマクロ

皆様、どうぞお知恵をお貸しください。 現在、社内有給日数一覧を作成しております。 社内規定で入社日(中途もいるためバラバラです)から半年を過ぎると10日間の有給が発生し、更にそこから毎年一年が経過すると10日の有給が発生します。 これらの動きをマクロで再現できないものかと思っているのですが、難しいでしょうか? どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.4

それなら、こういう手があります。 まず、個人レコードに「処理済みフラグ」列を確保します。 次に、年1回処理の初めに「処理済みフラグ」にフラグが立って いれば、処理をスキップするコードを入れ、スキップせずに処理 に入った場合の最後に「処理済み」フラグを立てます。 最後に「年1回処理の走った翌日以降のいつか」に「処理済み フラグを外す処理」を入れます。 こうすれば、年1回処理は「その日1回だけ」しか走りません。 日付で処理を走らせるプログラミング能力があるなら、この程度 の処理は簡単ですよね。要は起動回数に関係なく参照できる シート上に、フラグを作ってしまうことで何とかするわけです。 ちなみにこの「フラグ」、工夫次第で「その処理専用のエリア」に 確保することも(例えば個人コードとセットで持たせるとか)可能 だと思いますよ。

ri7021
質問者

お礼

長々とお付き合いいただき、本当にありがとうございます。 なるほど、その処理内だけで完成させようとすると無理があるのですね。 今回はシート内に『次回有給が加算される日』という項目を設けていてそこから指定日を引っ張ってきて処理させるようにしているので、処理が完了したらその日付を『次回有給が加算される日』に書き換えることで対処しようと思います。 (例:2014年9月9日に処理したら日付を2015年9月9日に変更する) おかげさまで思った通りのものになりそうです。 ありがとうございました。

その他の回答 (3)

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.3

いやだから、一人ひとり、基準日を別に算出する処理が前段に あることが前提なんですよ。何ならその処理はマクロ側でやって もいいわけで、そっちの発想で言えば各人の処理中に Do 何らかの個人別処理 マクロ(処理年月日,個人コード) LOOP UNTIL レコード終了 で、マクロに入り SUB マクロ(処理年月日,個人コード) IF 処理月=個人コードから検索される入社月 then IF 処理日=個人コードから検索される入社日 then 必要な年一回の処理 END IF:END IF END SUB こんな感じで、マクロに入り込んでも処理をスキップさせればいいだけ の話と違います?

ri7021
質問者

お礼

度々のご回答、ありがとうございます。 一日一度だけでなく一日に数回処理させることもあるため、日付で条件分岐させると同日内であればその都度計算してしまうというところを何とかしたかったのですが、そもそも一日数度処理させるものと年に一度しか処理させたくないものを一緒にするという時点で無理がありそうですね。。。 今ある物とは別途作成という方向で考えてみようと思います。 ご助言ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.2

そんなの、各人の処理の途中に組み込めばいいだけの話。 絶対「各個人のレコード内容を逐次なめて処理する」ってループ があるんで、その中で IF 処理月日=入社月日 then 年一回処理するマクロ ってコードを突っ込むだけでいいでしょ?

ri7021
質問者

補足

ご回答ありがとうございます。 調べたましたところ、ご教授いただいた『IF 処理月日=入社月日 then 年一回処理するマクロ』やApplication.OnTime DateValueで指定日の実行は可能のようでしたが、同じ日付であれば何度でも処理が走ってしまうので1日1回のみ実行というマクロと組み合わせる必要があるのですね。 その辺をもう少し詳しく調べてみようと思います。 ご助言ありがとうございました。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>これらの動きをマクロで再現できないものか プログラムってのは、本来人間がやるもの。を、その通りにコンピューターにやらせる。 ことが出来るもの。なので、 >>社内規定で入社日(中途もいるためバラバラです)から半年を過ぎると10日間の有給が発生し、 >>更にそこから毎年一年が経過すると10日の有給が発生します。 この辺のお決まりをきっちりとした「順番」に出来るのなら、可能かどうか?って話だけに関して言えば 可能です。 (この質問文の内容だけじゃきっちりしてない。ので、自分にゃ出来ないが。 >>一年に一度だけ実行する ただ、一年に一度しか使わない。 のに、何日かけてそのマクロ作るの?って話になると。。。 今のままの方がいいんじゃないの? 社員が数千人いる。とかなら別だけど。

ri7021
質問者

補足

早々のご回答ありがとうございます。 説明が足りなかったようで申し訳ありません。 有給計算そのものはVBAで既に作成済なのですが、「一年に一度、指定日にだけ実行する」ところで躓いております。 というのも、他のVBAの中に組み込む予定のsubのため、そのスクリプトが走る度に計算をし直してしまうため上手くいかないのです。 個々で有給日数管理をできれば一番なのですが。。。 ご助言ありがとうございました。

関連するQ&A

専門家に質問してみよう