前提・実現したいこと
開始日と終了日が入力されている行のみ塗りつぶしを行いたい。
ボタンを押さなくても入力後エンターキーで実行できるようにする方法があるのかどうか。
発生している問題・エラーメッセージ
開始日と終了日を入力していない行も塗りつぶされるので、どの部分を修正したらいいのかわからない。
また、38行目にも開始日と終了日を入力しましたが、塗りつぶされないが、修正方法がわからない。
該当のソースコード
Sub ガントチャート描写() 'オートシェイプ一括消去 Call オートシェイプ一括消去 '予定日程バー追加 Call 予定日程バー追加 End Sub Private Sub オートシェイプ一括消去() Dim shp As Shape For Each shp In ActiveSheet.Shapes If shp.Type = msoFormControl Then 'マクロ実行ボタンである場合は何もしない Else shp.Delete 'マクロ実行ボタンでない図形は消去 End If Next shp End Sub Private Sub 予定日程バー追加() Dim ws1 As Worksheet Dim i As Long Dim st As Range, en As Range Dim dayEnd As Long, rowEnd As Long Dim rngStart As Range, rngEnd As Range Dim xStart As Single, yStart As Single, xEnd As Single, x As Single, y As Single Set ws1 = ActiveSheet With ws1 dayEnd = .Cells(4, Columns.Count).End(xlToLeft).Column 'カレンダー上の最終日付列の取得 rowEnd = .Cells(Rows.Count, 2).End(xlUp).Row 'タスク最終行の取得 On Error Resume Next For i = 2 To rowEnd '開始日と終了日の対応列を設定する Set st = .Cells(4, WorksheetFunction.Match(.Cells(i, 4), .Range(.Cells(4, 1), .Cells(4, dayEnd)), 0)) '開始日のカレンダー上での対応列を設定 Set en = .Cells(4, WorksheetFunction.Match(.Cells(i, 5), .Range(.Cells(4, 1), .Cells(4, dayEnd)), 0)) '終了日のカレンダー上での対応列を設定 '開始日と終了日の両方が見つかればバーを描写する Set rngStart = .Cells(i, st.Column) 'バーの描写開始セルの設定 Set rngEnd = .Cells(i, en.Column + 1) 'バーの描写終了セルの1日後を設定 xStart = rngStart.Left 'バーの描写開始位置のX座標 yStart = rngStart.Top 'バーの描写開始位置のY座標 xEnd = rngEnd.Left 'バーの描写終了位置のX座標 y = rngEnd.Height 'バーの高さの方向の幅 With .Shapes.AddShape(msoShapeRectangle, xStart, yStart, xEnd - xStart, y) 'オートシェイプでバーを追加 .Fill.ForeColor.RGB = RGB(160, 229, 133) 'バーの色を指定 .Line.ForeColor.RGB = RGB(255, 255, 255) '枠線の色を指定 End With Next i '次の行へ End With End Sub
試したこと
上記のコードで実行しています。
インターネットで見たサンプルを参考にしました。
現在の実行後の画面です。
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。