エクセルマクロの時間外計算方法と取り消し線の作成方法

このQ&Aのポイント
  • エクセルのマクロを使用して、指定した時間外の日付の計算を行いたいです。
  • 具体的な作業として、同一日付の8:00から17:00以外の時間外のまとめをし、各日の最初の時間と最後の時間を取得し、他の時間には取り消し線を引きたいです。
  • マクロを使用して、同一日付の時間外の計算や取り消し線の作成を効率的に行いたいです。
回答を見る
  • ベストアンサー

エクセル マクロ

・まずルールとして決められた時間 今回は『 8:00 』~『 17:00 』以外の時間外の『 同一日付 』の日付の計算をするエクセルの マクロを組もうと考えています。少し複雑な内容になりますので私では組めなく困っております。 どうかお力添えをお願い致します。 考えている 作業としては 具体例を挙げますが (1) 『 同一日付 』の『 8:00 』~『 17:00 』以外の時間外のまとめをしたい (2) 下の例、 縦に並ぶ『 D 』セル内の 2012/07/10、7/12..と続く『 同一日付 』の時間外の時間を比較して (3) 『 同一日付 』の『 E 』と『 F 』の数字の最初の数字(時間)と最後の数字(時間)を取得し (4) 『 それ以外の時間 』には数字の上にーを引き《 エクセルの[ CTRL ]+数字の[ 5 ] 》で 引ける取り消し線 ーを引き (5) 『 D 』セル内の 2012/07/10 の『 同一日付 』が終わる『 下のセル 』 例( ● )黒丸の場所にセルを挿入し一旦『 空白を空け 』 その一旦『 空白を空け 』た『 A 』のセルに『 最初と最後の時間 』と書き込み その行の『 E 』と『 F 』に『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間)を 自動で書き込むマクロを作りたいのです (6) ・『 D 』セル内の比較する『 同一日付 』は『 縦に並んでおり 』、1つの時もあれば多くて20個 ・基本的に20日~翌月20日まで(土日祝が20日に当たれば18日~20日など前後しますが) ・(3)のデータを取得し(5)で『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間) を書き込むので(5)で書き込む以外の 『 同一日付 』内の時間外の時間にはすべて取り消し線を引きます ・数字の上にーを引き《 エクセルのCTRL+数字の5 》で 引ける取り消し線を引き..が説明のテキストでは表現出来ませんでしたが..必要な作業です 例で 『 時間の下に× 』を書いて見ましたが、これが取り消し線を実行した感じの時です 上手く伝えられているか分かりませんが、どうぞよろしくお願致します    A  | B | C  |     D  | E  |  F ____________|_______|_______|________________|__________________      |   |   | 2012/07/10| 17:24 | 17:37 _________________________________________________________________      |   |   | 2012/07/10| 17:15 | 17:50 __________________________________________________________________            |   |   | 2012/07/10| 17:15 | 17:22 __________________________________________________________________      |   |    |     |    |     | ●(セル挿入) → 『 最初と最後の時間 』と書き込み ___________|_______|_______|__________|_________|___________________      |   |   | 2012/07/12| 17:28 | 17:33 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:35 | 17:38 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:43 | 17:54 ___________|_______|______|___________|_________|___×___|___×___ 『 最初と最後の時間 』   |    |17:28  | 17:54 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:37 | 17:45 ___________|_______|_______|___________|_________|_______|___________      |   |   | 2012/07/12| 17:50 | 17:53 ___________|_______|_______|___________|_________|_______|__________

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 (# 『時刻』、、、に関する処理、ということでいいのですよね?) > 例で 『 時間の下に× 』を書いて見ましたが、これが取り消し線を実行した感じの時です 例示では、F:G列が×になっていたり、×(取消線)の位置が説明通りにはなっていないようですので、 説明文をこちらで解釈したものを元にしてお応えします。 期待されているものと、こちらの理解が一致していない可能性もありますので、 期待通りの結果が得られない場合は、補足欄にでも、より具体的な説明を書いてみてください。 修正点がハッキリと理解できれば、修正のお手伝いはします。 ' ' /// Sub Re8514242()   Dim vTemp   Dim vMin   Dim vMax   Dim c As Range   Dim nBtmRow As Long   Dim nB As Long   Dim i As Long ' ' ◆注意)1行めがタイトル行であること、が動作条件です。   nBtmRow = Cells(Rows.Count, "D").End(xlUp).Row   nB = nBtmRow   vTemp = Cells(nB, "D")   For i = nBtmRow To 1 Step -1     If Cells(i, "D") <> vTemp Then       Rows(nB + 1).Insert       With Cells(nB + 1, "A").Resize(, 6)         .FormulaR1C1 = Array("『最初と最後の時間』", , , , _           "=min(R[" & i - nB & "]C:R[-1]C)", "=max(R[" & i - nB & "]C:R[-1]C)")         .Value = .Value         vMin = .Cells(5)         vMax = .Cells(6)       End With       For Each c In Range("E:F " & i + 1 & ":" & nB)         If c > vMin And c < vMax Then c.Font.Strikethrough = True       Next       vTemp = Cells(i, "D")       nB = i     End If   Next i End Sub

nyanko_sensei12
質問者

お礼

先質問の件 空白がある為 そこを計算しているという事が分かり解決致しました 続けて質問を書き込みできないようなのであと少し修正などがいる為cj_mover様が組んで頂いたマクロ文を示し再投稿で質問させて頂きます お時間ありましたらまた回答お願い致します この度は大変助かりました ありがとうございました 一応質問しようかなと思っているのは 自分が決めた時間帯 例 8:00~17:00以外の時間帯だけの取得 16:50などは取得しないようにしたいのです

nyanko_sensei12
質問者

補足

cj_mover様 ご回答ありがとうございます 大変助かります 私にマクロを組める能力が無い為お手数をおかけします ほぼ理想どうりの動きが再現できました 詳細に説明しますと縦に並んだ ・『 D 』セルの『同一日付』内の ・『 E 』と『 F 』の時刻の比較 その『 D 』セルの『同一日付』が終わる下に1行挿入し『最初と最後の時間』 その1行挿入し『最初と最後の時間』と書き込みした行の『 E 』と『 F 』のところに 『同一日付』内の『 E 』と『 F 』の最初の数字(時間)と最後の数字(時間)を書き込み 『 それ以外の時間 』には数字の上にーを引き《 エクセルの[ CTRL ]+数字の[ 5 ] 》で 引ける取り消し線 ーを引くまでは私の理想どうりです エクセルで1行目をcj_mover様が◆注意)1行めがタイトル行であることとされているので 1行目を空白挿入した後に 『 D 』セルに『同一日付』『 E 』と『 F 』に17:10 17:15など3行ほど打ち込み作成して頂いたマクロをエクセルで実行して頂くとお分かりになると思いますが 例を書きます 1行目  空白 2行目 (ABCセルには他の文章があります)2012/7/10(Dセル)17:10(Eセル)17:20(Fセル)  3行目 (ABCセルには他の文章があります)2012/7/10(Dセル)17:20(Eセル)17:50(Fセル)   4行目 (ABCセルには他の文章があります)2012/7/10(Dセル)17:30(Eセル)17:40(Fセル)  5行目 空白セル挿入→『 A 』セルに『最初と最後の時間』と書き込み その行の17:10(Eセル)17:50(Fセル) 6行目 次の『同一日付』との空白 7行目 空白セル挿入→『 A 』セルに『最初と最後の時間』と書き込み その行の0:00(Eセル)0:00(Fセル)  8行目 次の『同一日付』と時刻 ・ ・ と続きますが この場合の7行目の書き込みと計算が必要ありません.. 私に能力が無い為 どう修正すればいいか分からず再度お伺い致します 申し訳ありません

その他の回答 (1)

回答No.2

「……は何ですか?」とか「……で合っていますか?」というのは質問、「……したいです」というのは業務委託です。ちょっと、あんまりです。QA サイトの趣旨に立ち返ってください。

関連するQ&A

  • 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  ×が取り消し線あり 上手く伝えられているか分かりませんが、どうぞよろしくお願い致します

  • エクセル関数 マクロ

    EXCELで作ってある表に数字を入力する時、 (例)セルA1⇒B1⇒C1(⇒D1⇒F1)と入力した後エンターキーを押したら、 セルA2⇒B2⇒C2(⇒D2⇒F2)へ、またエンターキーを押したら、 セルA3⇒B3⇒C3(⇒D1⇒F3)と移動する方法(関数?マクロ?!)を教えて下さい。

  • Excelのマクロで()内の文字を抽出して書き出したい

    HTMLにあるテーブルの部分をコピペして貼り付けたExcelファイルがあります。 A~Cまでの3列が埋まっている状態で、D以降の列は空欄です。 C列に123(1112)というように、数字(数字)の記載になっている部分があります。 ()の前と、中は必ず半角数字で、桁は1桁~5桁までと幅広い状態です。 この()内の数値をD~F欄に書き出したいです(縦3列のものを、横3列として書き出したい) 数字(数字)という記載のセルは、必ず縦に3つ並んでいますが C列は膨大なセル数なうえに、数字(数字)という記述以外のセルも間に入っております(数字のみのセルか、空欄のセルです) 3つ並んでいる部分のみを探して、()内の数値を抽出し、D~F列に書き出すことは可能でしょうか? 書き出す場所は、3つ並んでいるC列の最初のセルの横のD~Fだと助かります。 (数字(数字)がC6~8にあった場合、D6~F6に書き出される) なお、数字(数字)というセルはC列以外にはなく、4つ以上縦に並ぶ事もありません。 さすがにこのような内容を実行するのは不可能でしょうか? もし可能でしたら、マクロを組んでいただきたいです・・・よろしくお願いします。

  • エクセル2000で・・・

    仮にD、E、Fそれぞれの列に数値が入っています。 例としてD5に140、E5に130、F5に150と 入っているとします。 D6に40%、E6に50%F6に55%と入っているとします。 その中で一番低い数字が入っているセルを赤に表示させたいのです。 その該当する数字を赤文字で表示するのでもかまいません。 上のように数字だ入っている場合もあればパーセントで表示 されている場合もあります。 但し、同じ行で数字とパーセントが入っている事はありません。 上記の例で言えばE5とD6のセルを赤く表示させるあるいは その中の文字のみを赤文字にすると言う事です。 行数にして500くらいあるのでいちいち選択するのが面倒で 簡単に表示させる方法があれば教えて下さい。

  • エクセルのマクロ 並んだ数字の幾つかを抜き出してその合計を計算させたいのですが・・

    エクセルのマクロ(VBA)について、教えてください。 セルのA1からA2・・・A1000までに「01,03,06,08,20,」のように5つの数字がカンマで区切られて入力されています。 1.この5つの数字をb.c.d.e.f.の1から1000のそれぞれのセルに配置するマクロ 2.この5つの数字の数字の合計をb1から1000のセルに表示させるマクロは難しいでしょうか? MID関数をひとつづつのセルに入れていたのですが、マクロでできれば効率が良いと思い手引書等で考えたのですがよく分からないのです。

  • エクセル2007VBAで足し算がしたいです。

    エクセルで下記のような表を作成し、2行目の両端の2つのセルの数字を選択してA1に合計を求めたいのですが選択するセルを変える場合があるので困っています。 例1) ------------------------------------     A   B   C   D   E   F 1    x 2       10  20  30 3 ------------------------------------ 例2) ------------------------------------     A   B   C   D   E   F 1    x 2           20   30   40 3 ------------------------------------ 例1の場合は10+30でA1セルに40と出るように、 例2の場合は20+40でA1セルに60と出るようにするにはどうすればよいでしょうか? 色々試してみたのですがうまくいかず手詰まりになってしまいました。。。 ご存知の方いましたらご教示ください。よろしくお願いします。

  • エクセルのマクロ(関数?)について質問です。

    会社で、以下の資料作成を依頼されましたが、いろいろ調べましたが全くやり方の見当がつかないので、教えてください。。 病院に来院された患者さんで、 (1)予約時間に遅刻した (2)予約時間よりも早く受付、予約時間後検査開始 (3)予約時間よりも早く受付、予約時間よりも早く検査実施 以上3パターンの患者さんの数を把握したく、表を作成しなくてはなりません。 以下のURLに、サンプルファイルをアップしました。 http://kie.nu/yF2 列H(のセルH11からずっと下まで)に、上記3パターンが一発(もしくは2~3発)で表示されるようにしたいのです。 列A、B、Dの日時は、別のデータベースから抽出したものなので、最初から入力されています。 列Hのパターンを出す方法ですが、まず列C、E、F、Gにそれぞれ数式を入れないといけません。 例として、行11を試しに算出してみると、 ・セルC11=D11-B11(時間のみ引き算したいのですが、日付も入っているので出来なくて困ってます。。以下同様) ・セルE11=D11-A11 ・セルF11=D11-A11(計算結果がマイナスになる場合はゼロと表示されるようにしたい) ・セルG11=A11-B11 この計算で、G11の数字がマイナスになれば(1)のパターン、 E11の待ち時間のセルと、G11のセルの数字が両方プラスになっていれば(2)のパターン、 F11の待ち時間がゼロ、E11がマイナス、G11がプラスになっていれば(3)のパターン ということになります。。 あと、セルの色も、パターン(1)の時は列Cのセルが、パターン(2)の時は列Eのセルが、パターン(3)の時は列Fのセルを それぞれ黄色になるようにしたいのです。 すごく説明も複雑になってしまい大変申し訳ないのですが、 要は列Hに上記3パターンを簡単に表示させる方法が知りたいのです。 無理なお願いをしていることは承知しているので、「こんなの答えられない」といった趣旨の回答はご遠慮いただけたらと思います。。 出来れば至急でお返事いただきたいのですが、宜しくお願いいたします。

  • EXCELのマクロで。。。

    シートAのセルC2の値(数字)を シートBのE、F、Gの各列のうち空いている一番左のセルで、かつ、D列に何か書いてある一番下の行のセル に転記したいです。 たとえば、シートBが図のような場合にはF28です。これが毎回、変化します。 マクロの記述を教えて下さい。よろしくお願い致します。

  • エクセル

    エクセルで下記具体例のような方法を教えてください。 具体例 シート1のD4に5を入力 別のシートのB2~19に入力している5の数字のセルが赤に シート1のE4に10を入力 同じく別シートのB2~19に入力している10の数字のセルが青に シート1のF4に3を入力 同じく別シートのB2~19に入力している3の数字のセルが黄色に なるような方法を教えてください。

  • エクセルで数字を1文字ずつセルに入れたい

    エクセルでの質問です 1つのセルに例えば”1530”という数字を入力します そうすると その数字を分解して f1のセルに”0” e1のセルには”3” d1のセルに”5” c1のセルに”1” b1のセルに”¥”が自動的に入るようにしたいのですが どうすれば良いでしょう 数字は4ケタ~7ケタまで変わります よろしくお願いいたします。

専門家に質問してみよう