エクセルVBA初心者がガントチャートを作成中に問題が発生

このQ&Aのポイント
  • エクセルVBA初心者がガントチャートを作成中にうまく動かない問題に直面しています。
  • 特に、セルの値を条件分岐して色を変える部分に問題があり、調査の結果セルを空にすることで一時的に解決しました。
  • しかし、他の解決策を見つけたいと思っているので、アドバイスをいただきたいです。
回答を見る
  • ベストアンサー

エクセルVBAについて

エクセルVBA初心者で、勉強している者です。 今、ガントチャートのようなものを作っているのですが、 下記のような記述をしたのですがうまく動きません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = "10:00" Then Worksheets("(2)(2)(2)(2)").Range("T2").Select With Selection.Interior .ColorIndex = 8 .Pattern = xlSolid End With End If End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ F2のセルを空にし、「""」で実行すると動きました。 色々調べてみたものの、煮詰まってしまいました・・・。 よろしくお願いいたします。

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

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

F2のセルには何が入っていますか? 10:00という時刻が入っているのなら Range("F2").Value = "10:00" は10:00という「文字列」と比較しているので、一致しません。 時刻で比較するには、上記の部分を以下のようにしてみてください Range("F2").Value = CDate("10:00") '文字列を日付型に変換 または Range("F2").Value = #10:00:00 AM# '時刻リテラルを使用

mmhof4
質問者

お礼

ご回答いただきありがとうございます。 早速試してみたところ、無事に動きました。 いや~、助かりました。 本当にありがとうございました!m(_ _)m

関連するQ&A

  • エクセルVBAについて

    エクセルVBA初心者で、勉強中の者です。 添付画像のような時間のグラフのようなものを作りたいと思っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:05") Then Worksheets("(2)(2)(2)(2)").Range("I2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With Elseif Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:10") Then Worksheets("(2)(2)(2)(2)").Range("J2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With  ・  ・   ・ End If End Sub 'それから、終了の時間を入れて、開始から終了までの間を塗りつぶす。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上のように作成しようと考えていましたが、いざやろうとすると 1行に対してあまりにも膨大な記述をしなくてはならないことに 気がつきました(一月分ともなると恐ろしいです・・・)・・・。 もっと効率的な方法はあるものでしょうか? よろしくお願いいたします。

  • エクセルで繰り返し処理をしたいのですが

    下記のマクロを6行目で展開しています。 これと同じ処理を7行目~36行目めまでさせたいのですが どうやればいいのか教えていただけないでしょうか? sub test() Select Case a Case 2, 3, 4, 5, 6 Range("F6").Select Selection.FormulaR1C1 = _ "=IF(RC[-1]-RC[-2]-0.75-RC[8]-RC[9]<=0,0,RC[-1]-RC[-2]-0.75-RC[8]-RC[9])" Range("H6").Select Selection.FormulaR1C1 = "=IF(-7.75>=RC[9],0,RC[9])" Range("J6").Select Selection.FormulaR1C1 = _ "=IF(IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))<=0,0,IF(RC[-5]<=22,0,(RC[-5]-22-RC[6])))" Range("B6:W6").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Case 0, 1 Range("F6").Select Selection.ClearContents Range("H6").Select Selection.ClearContents Selection.FormulaR1C1 = "=IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))" Range("J6").Select Selection.ClearContents Range("B6:W6").Select With Selection.Interior .ColorIndex = 45 .Pattern = xlSolid End With End select End sub

  • マクロ:セルの範囲指定

    エクセルマクロで困っています。 セルの範囲指定をしようとしています。 初心者過ぎて、よくわかりません。 現在のマクロ↓ Sub 済() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え ActiveCell.Offset(0, 5).Select ActiveCell.FormulaR1C1 = "77" ActiveCell.Offset(0, -5).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub やりたい事は、下記の通りです。 列Uがアクティブの時にU~ACの行を塗りつぶし。 列は変動します。 今は、やり方がよく分からなかったため オフセットで一つ一つ塗りつぶしてます。 マクロを組みすぎてファイルが重くなって困っています。 回答よろしくお願いいたします。

  • Excelで渦巻状にセルを移動するマクロを作りたいのです

    マクロで渦身状&時計回りにアクティブセルを移動させるにはどのように 記述したらよいでしょうか。 例えば、E16を選択しているときにマクロを実行したら E16→D16→D15→D14→E14→F14→F15→F16→F17→E17→D17→C17→… と移動していく感じです。 キーボード記録マクロで[↑][↓][←][→]キーで移動してみても何も記録 されなかったので、移動→黄色に塗りつぶし、という繰り返しを記録 してみると、文末のようにはなりました。が、渦巻き状に移動という アルゴリズムがさっぱり思いつきません。 無限でなく、例えば10周くらいまわれば十分です。 最終的には、移動するごとに、踏んだセルの値を評価(1だったら赤に塗る、 のように)していきますが、まずは選択セルを基点に渦巻状にセルを移動 する方法が知りたいです。 よろしくお願いします。 Sub Macro1() With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("E16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("D16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ' ■中略■ Range("C17").Select With Selection.Interior End Sub .ColorIndex = 6 .Pattern = xlSolid End With (ちなみに) エクセル上に、日本地図が碁盤目状に描かれています。 セルには、平野=1、山=2、海=3のように記述されています。 これを特定法則で塗り分けるのに利用します。

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • エクセルVBAでクリックしたセルのみ書式を変えたいのです。

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Row <= 11 And Target.Column <= 11 Then With Selection .Interior.ColorIndex = 3 .Font.ColorIndex = 2 .Font.Bold = True End With End If End Sub これで出来るのですが、問題は別のセルに移動しても書式は変ったままなのです。(当り前ですが) 書式を変えるのはあくまで選択されている間だけにしたいのです。 どのようにすればよいのでしょうか? エクセル97です。

  • エクセルVBAについて

    VBAを勉強しているものです。 添付資料のようなグラフを作っております。 ############################################################### Sub 時間グラフ作成() Dim 開始 As Date Dim 終了 As Date Dim 開始経過時間 As Long, 終了経過時間 As Long Dim 開始目盛 As Long, 終了目盛 As Long 開始 = Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value 開始経過時間 = DateDiff("n", CDate("9:00"), 開始) 開始目盛 = Int(開始経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 開始目盛).Interior.ColorIndex = 8 If 開始 <= "11:00" And 終了 >= "12:00" 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 End Sub ############################################################### 休憩時間のIfの処理がうまくいかなくて困っています・・・。 &とAndで変わったり(どちらもうまくいかず)、 ()をつけたりしても変わらず、そもそも根本的に 間違っているのか・・・。 よろしくお願いいたします。 (グラフの繰り返しの処理は未だ考え中で触っておりません)

  • エクセルですが・・・。

    チェックボックスについてです。 Private Sub CheckBox1_Click() If CheckBox1 Then Range("F1:F6").Interior.ColorIndex = 3 Else Range("F1:F6").Interior.ColorIndex = xlNone End If End Sub 以前、上記のように教えていただいたのですが、 これですと、1行しか設定していませんよね? これを、例えば100行くらい自動で設定できませんか? 宜しくお願いします。

  • 空白セルと0値を識別させたい。(VBA)

    すみません、誰か教えていただけますか。 シートの53、54、55行目にそれぞれ値入っています。 それを3行目にビジュアル的に表現させています。 55行目はセルの色で、53行目は数値があり同じ値が 続く部分の合計を出しています。 しかし、下記の記述ですと数値が0(変数D=0)の時に うまくいきません。空白セルと認識されてしまうと思います。 何か、良い方法があれば教えて頂けませんでしょうか。 宜しくお願いします。 Sub 表示() Dim a As Long Dim c As Long Dim D As Long Dim e As String Dim f As String c = 3 For a = 3 To 64 With Worksheets("Sheet1") If .Cells(53, a) <> .Cells(53, a + 1) Then .Range(.Cells(53, c), .Cells(53, a)).Select D = WorksheetFunction.Sum(Selection) e = D f = Selection(1).Offset(1, 0).Value G = Selection(1).Offset(2, 0).Value If D <> 0 Then Selection(1).Offset(-50, 0).Value = f + "//" + e .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.Interior.ColorIndex = G End If If Selection(1).Value = "" Then .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone End If c = a + 1 End If End With Next End Sub

  • VBAでの計算後のセルに2重線で囲む

    まだPC・VBA不慣れな為、実行できないので、教えてください。 c16セルに休日を入力すると無理つぶしは成功しましたが、c16セルに祭日を入力すると赤の2重線で囲みたいのですが、できませんので、方法をお願いします。 もう1点がCELLS・RANGEを使った2種類の方法をお願いします。 よろしくお願いします。 Sub 練習44() Dim kyuyo As Currency If Range("c16").Value = "祭日" Then Worksheets("練習1If~Then").Cells(16, 3).xlDouble.ColorIndex = 3 ElseIf Range("c16").Value = "休日" Then Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 5 Else Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 10 End If End Sub

専門家に質問してみよう