祝日出力マクロをアップデートしてみた
2017-01-20 勉強会
こんにちは。
2016年に入社した新入社員の木村です。
天皇陛下が再来年の春には譲位されるということで今様々な特別法などが制定される動きがあるようですね。
天皇陛下が譲位されるということは祝日の天皇誕生日や昭和の日が変更されることにもつながります。
祝日の変更作業は1年ごとに行っていると面倒なので簡単にできるマクロを作成しました!
2016年に入社した新入社員の木村です。
天皇陛下が再来年の春には譲位されるということで今様々な特別法などが制定される動きがあるようですね。
天皇陛下が譲位されるということは祝日の天皇誕生日や昭和の日が変更されることにもつながります。
祝日の変更作業は1年ごとに行っていると面倒なので簡単にできるマクロを作成しました!
既存のマクロ
2016年の6月ごろに業務上で1980年から2040年頃までの祝日のデータが必要になりまして、一年ごとの祝日を書き出していくのは面倒だったのでマクロを作成したのですが…
このように、祝日データをプログラム上に書いているため見た目はすっきりしていますが。
修正するのが難しく、祝日が追加や削除になったときにはプログラムから直す形となっています。
また、エクセル上に出力されるためログファイルにコピーペーストする手間がありました。
修正するのが難しく、祝日が追加や削除になったときにはプログラムから直す形となっています。
また、エクセル上に出力されるためログファイルにコピーペーストする手間がありました。
改修案
・祝日を簡単に修正できるように表にする!
・CSV形式で出力する!
ということで改修していきましょう
・CSV形式で出力する!
ということで改修していきましょう
祝日表
始めは画像のようにしていたのですが…
これでは、長期間の祝日を出力する際に祝日の日にちの切り替わりに対応できず……
これでは、長期間の祝日を出力する際に祝日の日にちの切り替わりに対応できず……
そこで、このように開始年、終了年の列を追加して解決することにしました。
CSV出力
これについては以下の式を入れることで解消しました。
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="holiday.csv", FileFormat:=xlCSV, Local:=True
この式の意味としましては、現在のシートを新しいブックにコピーして
そのブックを「holiday.csv」として保存するというものです。
保存先は出力マクロと同階層に保存されます。
例えば「ドキュメント」にマクロを置いていた場合、そのまま「ドキュメント」にcsvが保存されます。
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="holiday.csv", FileFormat:=xlCSV, Local:=True
この式の意味としましては、現在のシートを新しいブックにコピーして
そのブックを「holiday.csv」として保存するというものです。
保存先は出力マクロと同階層に保存されます。
例えば「ドキュメント」にマクロを置いていた場合、そのまま「ドキュメント」にcsvが保存されます。
完成!!!
以上の改修で完成しました!
……しかし、完成して使ってみるといくつか気になる点が見つかりまして…
例えば日付のフォーマットがシステムにこれで沿うのかという点や動作が重い点です。
PC環境にもよるのですが、動作に3分程かかっており、致命的だったのですぐに修正に取り掛かりました。
原因としましてはセルに値に入れる際にセルの場所が「A4684」など無駄な空白が多くなっていたためでした。
日付のフォーマットに関しましてはすぐに案が思い浮かばなかったので手動で変更してもらうことにしました。
方法を思いつき次第アップデートしようと思います。
……しかし、完成して使ってみるといくつか気になる点が見つかりまして…
例えば日付のフォーマットがシステムにこれで沿うのかという点や動作が重い点です。
PC環境にもよるのですが、動作に3分程かかっており、致命的だったのですぐに修正に取り掛かりました。
原因としましてはセルに値に入れる際にセルの場所が「A4684」など無駄な空白が多くなっていたためでした。
日付のフォーマットに関しましてはすぐに案が思い浮かばなかったので手動で変更してもらうことにしました。
方法を思いつき次第アップデートしようと思います。