• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAについて)

エクセルVBAで効率的に時間のグラフを作成する方法

このQ&Aのポイント
  • エクセルVBA初心者の方へ。時間のグラフを効率的に作成する方法をご紹介します。
  • 質問者様は時間のグラフを作成したいと考えていますが、現在の方法では1行ごとに膨大な記述が必要となります。そこで、より効率的な方法についてアドバイスをいたします。
  • 質問者様が探しているのは、エクセルVBAを使って効率的に時間のグラフを作成する方法です。一行ずつ記述するのではなく、複数の行を一括で処理する方法をご紹介します。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

開始セルの求め方 Dim 開始 As Date Dim 経過時間 As Long, 目盛 As Long 開始 = Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value '9:00から開始までの経過時間を計ります 経過時間 = DateDiff("n", CDate("9:00"), 開始) '目盛数を計算します(1目盛/5分) 目盛 = Int(経過時間 / 5) '開始セルは Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 目盛).Interior.ColorIndex = 8 これが解れば終了セルも求めて Range(開始セル,終了セル).Interior.ColorIndex = 8 と一挙に行えますね、頑張ってください。

mmhof4
質問者

お礼

watabe007様 ありがとうございました。

mmhof4
質問者

補足

watabe007様 早速のご回答ありがとうございます! まだ、勉強不足でして結果として対象のセルに色が塗られるものの、 なぜそうなるのか目下検証中でございます。 終了セルを求めるのはこれから頑張ります(少々自信がありませんが・・・)。 申し訳ないのですが、グラフには昼休みが設定されておりまして、 (11:30~12:30迄)開始時間が12:35を越えるとずれてしまいます・・・。 別表で関数の計算を行った際には「12:30を越える計算はマイナス1時間」と 偶然にもうまくいったのですが、VBAでは今のところ皆目検討が つきません・・・。 ご教示いただけませんでしょうか。 よろしくお願いいたします。 PS こんなに簡潔に求めることができるとは、正直目から鱗です。 VBAってのは素晴らしいですね。 私も勉強をしてwatabe007様のようにVBAを使いこなせるように 頑張ります。ありがとうございました。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

開始時間の1時間前は 開始 = DateAdd("h", -1, 開始) 開始時間の1時間後は 開始 = DateAdd("h", 1, 開始) また11:30~12:30間の開始を12:30とするのは If 開始 >= TimeValue("11:30:00") And 開始 < TimeValue("12:30:00") Then 開始 = TimeValue("12:30:00") End If

mmhof4
質問者

お礼

watabe007様 ご回答を頂きありがとうございます。 返事が遅くなりました。すみません。 最初の回答を頂いてから本屋に走り、エクセルVBAプログラミングの 初心者向けの本を買って勉強しております。 この本を見ながら最初の回答を調べてみて、意味を理解することが できました。2つ目の回答(休憩時間)が少々難しく、最初の回答に どのように付けたらよいのかよく解らず、自分なりに下記のように 書いてみたところ、何とか動きました。 自分で見ても出来が良くないのが判りますが、うまく動いたのには 感激しました。 今度はこれの繰り返しの処理等を付けていかなければなりません。 解らないことが出てきたら多分またこちらでお世話になるかと 思います。その際は、またよろしくお願いいたします。 本当にお世話になりました。ありがとうございました。 If 開始 <= "11:30" & 終了 >= "12:30" Then 終了 = Worksheets("(1)(1)(1)(1)(1)").Range("G2").Value 終了経過時間 = DateDiff("n", CDate("9:00"), 終了) 終了目盛 = Int(終了経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 終了目盛 - 12).Interior.ColorIndex = 8 Range(Range("H2").Offset(, 開始目盛), Range("H2").Offset(, 終了目盛 - 12)).Interior.ColorIndex = 8 Else 終了 = Worksheets("(1)(1)(1)(1)(1)")..Range("G2").Value 終了経過時間 = DateDiff("n", CDate("9:00"), 終了) 終了目盛 = Int(終了経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 終了目盛).Interior.ColorIndex = 8 Range(Range("H2").Offset(, 開始目盛), Range("H2").Offset(, 終了目盛)).Interior.ColorIndex = 8 End If

関連するQ&A