中山テック 代表の中山です。
さて、しばらくVBA特集です。
今回はボタンを押してセルに色を塗るというVBAをご紹介。
かんたんなガントチャートを例にお話していければと思います。
※Office Personal 2019 Excelでの操作です
まずはボタンを用意します。
開発タブ⇒挿入⇒フォームコントロールのボタンをクリック⇒新規登録でボタンを配置、VBAの画面を開きます。
- Excel(エクセル)で行を表示させない方法~グループ化らくらく非表示♪~
- Excel(エクセル)で画像加工~モザイク、明るさ、色変更など多彩です~
- Excel(エクセル)、行・列に複数の見出しを作る方法~テキストエディタを駆使~
- Excel(エクセル)のフィルターで空白セルがあるとソートされない場合の対処法
- 共有されたGoogleスプレッドシートで個別にフィルタを作成しソートする方法
- Excel(エクセル)で列表記をローマ字⇔数値に変更する方法~VBAで大活躍~
- 条件に当てはまる在庫はいくつ?Excel(エクセル)の1関数でグループ化する方法
どんなチャートを作るか
ボタンを押すと予定の範囲に色が付きます。
例えば、タスク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でセルに色を塗る・色なしにするをテーマに
最後までご覧いただき、ありがとうございました。