中山テック 代表の中山です。
さて、しばらくVBA特集です。
今回はボタンを押してセルに色を塗るというVBAをご紹介。
かんたんなガントチャートを例にお話していければと思います。
※Office Personal 2019 Excelでの操作です
まずはボタンを用意します。
開発タブ⇒挿入⇒フォームコントロールのボタンをクリック⇒新規登録でボタンを配置、VBAの画面を開きます。
- VBAの基礎構文について~変数定義やif文、for文、内部関数の定義方法を備忘的に残します~
- Excelで悩むのはもう終わり!お悩み相談受け付けます!
- Excel(エクセル)で数字を順番に振る方法~項目番号やカレンダーまで応用~
- 条件に当てはまる在庫はいくつ?Excel(エクセル)の1関数でグループ化する方法
- Excel(エクセル)でワークシートが表示されない時の対処法
- タイムカードはExcel(エクセル)で超カンタンに作れます!~労働時間管理~
- Excel(エクセル)で見出しを固定する方法~見やすさが格段に変わります!~
どんなチャートを作るか
ボタンを押すと予定の範囲に色が付きます。
例えば、タスク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でセルに色を塗る・色なしにするをテーマに
最後までご覧いただき、ありがとうございました。