【Excel】VBAでセルに色を塗る方法~かんたんなガントチャートを例に~
システムに欠かせないミドルウェアの世界

中山テック 代表の中山です。

さて、しばらくVBA特集です。

今回はボタンを押してセルに色を塗るというVBAをご紹介。

かんたんなガントチャートを例にお話していければと思います。

Excel公式



※Office Personal 2019 Excelでの操作です

まずはボタンを用意します。

開発タブ⇒挿入⇒フォームコントロールのボタンをクリック⇒新規登録でボタンを配置、VBAの画面を開きます。

新規作成を押すとVBAの画面に移動
VBA記述の準備が整いました!


  • システム開発関連記事

どんなチャートを作るか

ボタンを押すと予定の範囲に色が付きます。

例えば、タスクAであれば1/1~1/4となるのですが、7行目の4~7個目のセルに色が塗られます。

そして現在日付が1/4だった場合に「今日までだな」ということがわかりやすくなります。

※必要であれば現在日付のセルに色を塗るというプログラムを組むこともおススメです



VBA

Sub ボタン1_Click()
  Dim fromDate As Date    ' 予定FROM日付
  Dim toDate As Date      ' 予定TO日付
  Dim nowDate As Date     ' 比較対象日付(列)
  Dim counter As Integer  ' 現在の行
  
  counter = 1
  
  For i = 7 To 100 ⇒①
    If Cells(i, 2) = "" Then ⇒②
      Exit For
    End If
  
    '--------------------------------
    ' 予定のFROM・TO日付を取得
    '--------------------------------
    fromDate = Cells(i, 2) ⇒③
    toDate = Cells(i, 3) ⇒④
    
    For j = 4 To 100 ⇒⑤
    
      If Cells(6, j) = "" Then ⇒⑥
        Exit For
      End If
    
      nowDate = Cells(6, j) ⇒⑦
      
      If fromDate <= nowDate And toDate >= nowDate Then
      
        Cells((6 + counter), j).Interior.Color = RGB(102, 255, 0) ⇒⑧

      Else

        Cells((6 + counter), j).Interior.Color = xlNone ⇒⑨

      End If
    
    Next j
    
    counter = counter + 1 ⇒⑩
  
  Next i
  
End Sub

予定のFROM・TO日付を取得

①にループ処理を入れていますが、2列目と3列目のFROM・TO日付を取得に必要な処理です。

そして②は空白セルに到達したら処理を終了となっております。

③のCellsで7行目、2列目のFROMをゲット、④のCellsで7行目、3列目のTOをゲットします。

※それぞれfromDate、toDateに格納します

カレンダーの日付を取得

Excel6行目、4列目からカレンダーが記載されていますので片っ端から取得していきます。

⑤では列のループ処理を記述しており、1/1~の日付を取得。

Cellsで取得し、nowDateという変数に入れます。

色を付ける

nowDateが③④で取得した日付の範囲内であれば色を塗ります。

ただ、VBA上は日付のセル(4行目6列目)にカーソルが当たっているので色はその下、つまり+1の行に塗ります。

変数「counter」が役に立ちます。

⑧⑨のCells((6 + counter), j)の処理に当たります。

予定の範囲から外れた場合は色を塗らないのでRGB指定せず「xlNone」で色なしセルを設定します。

1つ目の予定の色塗りが完成したら⑩のcounter+1し、カレンダー行の2行目に色を・・・と進んでいきます。



まとめ

さて、今回は予定のみのガントチャートをご紹介しました。

ガントチャートのソフトについてはこちらでも執筆してますので、よろしければご活用ください。

※今回は備忘兼ねてVBAでセルに色を塗る・色なしにするをテーマに

最後までご覧いただき、ありがとうございました。

※中山テックに掲載しているゲーム画像の著作権、商標権、その他知的財産権は、当該コンテンツの提供元に帰属します


おすすめの記事