- 締切済み
excel マクロ
エクセル マクロ 時間の計算 ・まずルールとして決められた時間 今回は『 8:00 』~『 17:00 』以外の時間外の『 同一日付 』の日付の計算をする エクセルのマクロを組もうと考えています。少し複雑な内容になります 考えている 作業としては 具体例を挙げますが (1) 『 同一日付 』の『 8:00 』~『 17:00 』《 以外にある時間外 》のまとめをしたい (2) この場合 08:30や16:50には反応せず 時間外の17:01~翌日の08:00までの時間外に反応するもの (3) その際 作業判定させるセルは横に並んだA、B、C、D、E、F、Gの中の『 C 』『 D 』『 E 』『 F 』『 G 』の与えられたデータで判定 (4) 基本的には下の例、 縦に並ぶ『 D 』セル内の 2012/07/10、7/12..と続く『 同一日付 』の時間外の時間を比較して (5) 『 同一日付 』の列の『 8:00 』~『 17:00 』《 以外にある時間外 》の 『 F 』と『 G 』セルの数字の最初の数字(時間)と最後の数字(時間)を取得し (6) 『 同一日付 』の列の『 8:00 』~『 17:00 』《 以外にある時間外 》の時間が重なっている 『 それ以外の時間 』には数字の上にーを引き《 エクセルの[ CTRL ]+数字の[ 5 ] 》で 引ける取り消し線 ーを引く 例 基本的に『 F 』に最小時間、『 G 』に最大時間が表示されます ≪総合判定で述べる判定方法では例外ありますが≫ 17:10~17:20、 17:20~17:50とあれば 17:10~17:50と書き 『 (7)説明の動き 』 それ以外の時間には(6)の取り消し線を引きたい この際は17:10~17:20、 17:20~17:50の17:20に(6)の取り消し線を引きたい ※ 取り消し線を引いた行のセルの『 H 』セルのデータは削除 (7) 例 『 D 』セル内の 2012/07/10 の『 同一日付 』が終わる『 下のセル 』に 例( ● )黒丸の場所にセルを挿入し一旦『 空白を空け 』 その一旦『 空白を空け 』た『 A 』のセルに『 最初と最後の時間 』と書き込み その行の『 F 』と『 G 』に『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間)と 『 G 』から『 F 』を引いた時間『 H 』の書き込みを 自動で処理し書き込むマクロを作りたいのです 例 A D F G H 2012/07/10 17:10 17:20 0:10 2012/07/10 17:20 17:50 0:30 ↓ A D F G H 2012/07/10 17:10 17:20 × 2012/07/10 17:20 17:50 セル挿入 × ●『 最初と最後の時間 』 17:10 17:50 0:40 ×が取り消し線あり (8) ・『 D 』セル内の比較する『 同一日付 』は『 縦に並んでおり 』、1つの時もあれば多くて20個 ・基本的に20日~翌月20日まで(土日祝が20日に当たれば18日~20日など前後しますが) (9) ・(5)のデータを取得し(7)の動きで『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間) を書き込むので(7)で書き込む以外の 『 同一日付 』内の時間外の時間にはすべて取り消し線を引きます ・数字の上にーを引き《 エクセルのCTRL+数字の5 》で 引ける取り消し線を引き..が説明のテキストでは表現出来ませんでしたが..必要な作業です 例で 『 時間の下に× 』を書いて見ましたが、これが基本的な取り消し線を実行した感じの時です ◎ さらにここから先が総合判定要素として複雑なのですが『 同一日付 』内の時間外の時間の判定の仕方として 1.『 E 』セルに 《 休 》 表記あれば基本的に何も判定、動作なしでそのままの表記でOK。 ただし『 C 』セルに以下に説明する表記ある場合を除きます 2.『 C 』セルに『運転』と『予約』表記あり、その中で『停止』表記が出てきた場合には →『停止』表記の『 F 』のセルの数値を『最大値』として判定し(9)の動作の動き 『運転』と『予約』表記あり、その中で『停止』表記が出てきた場合には その数値を『最大値』として判定し(9)の動作の動き(その時間は『停止』表記の時には『 G 』ではなく『 F 』に出てきます。) 3.『 C 』セルに『予約』、『予約取り消し』と連続して表記ある場合 『 同一日付 』で『 C 』セルに『予約』、『予約取り消し』と連続して表記があり、 『 D 』の日付『 F 』『 G 』の時間も同じならば(9)の動きで、その2行の『予約』、『予約取り消し』の 『 F 』『 G 』の時間には取り消し線、その2行の下に(9)の動きで『 H 』の場所に0:00と書き込みしたいのです 例 A C D F G H 予約 2012/07/10 17:00 19:00 2:00 予約取り消し 2012/07/10 17:00 19:00 2:00 ↓ A C D F G H 予約 2012/07/10 17:00 19:00 × × 予約取り消し 2012/07/10 17:00 19:00 × × セル挿入 ●『 最初と最後の時間 』 17:00 19:00 0:00 4. 『 C 』セルに表記あるものとして『運転』『停止』『予約』『予約取り消し』の4種類の表記があります 5.『 同一日付 』の列の『 8:00 』~『 17:00 』《 以外にある時間外 》の処理を行いたいのですが 場合によっては『予約』や『運転』で処理動作の必要のない時間内から、動作の必要な時間外へと『予約』『運転』されている場合もあり 例 今回は『 8:00 』~『 17:00 』以外の時間外の処理なので、『 E 』の休日ではなく( 休日は◎の総合判定あれば処理必要 ) 6. 時間内~時間外へと進む時間外の処理動作 平日の『予約』や『運転』『 16:00 』~『 19:00 』の場合 ≪ 16:00 ≫~≪ 17:00 ≫は時間内なので動作処理の必要はなく 処理としては指定した時間 今回は『 8:00 』~『 17:00 』内の時間であれば ≪平日≫の『予約』や『運転』『 16:00 』~『 19:00 』や『 06:00 』~『 08:00 』の場合 (9)の要領で 『 17:00 』~『 19:00 』とその時間内を含むセルの下に≪ 訂正 ≫をしてから処理したいのです 例 A D F G H 2012/07/10 16:00 19:00 3:00 ↓ A D F G H 2012/07/10 16:00 19:00 × × ●セル挿入 ≪ 訂正 ≫ 17:00 19:00 2:00 ×が取り消し線あり 上手く伝えられているか分かりませんが、どうぞよろしくお願い致します
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mindatg
- ベストアンサー率48% (110/227)
恐らく回答は付かないと思います。 回答が付かず、質問の仕方が悪かったのか?と再度質問する前に下記をどうぞ ・項目が多すぎです。無駄な改行が目立ち非常に可読性が悪いです ・項目の途中でいきなり定義が出てきています。(運転だの予約だの)前提条件は最初に列記した方がいいです。 ・入力前、入力後、マクロ実行前、マクロ実行後 せめてマクロ実行後にこんな感じにしたいとイメージ画像でも付けておけば分かり易いです。 ・その結構なボリュームのマクロをタダで作ってもらうには虫が良すぎる話です