はじめに
ここで作成するガントチャートは、Excelの機能が8割、VBAの機能が2割程度である。
年と月を指定すると、固定した日にちとそれに対応した曜日が設定される。月の日付ごとのガントチャートといえる。
開始日と終了日の項目を外した。理由はチャートの図で読み取れば十分だと判断したからである。
シートは2枚必要で、1枚目はプルダウンメニューを出すためのDataシート、もう一枚はガントチャートのシートである。
問題


問題)チャートに線をいれ、実行コマンドボタンを押せば線が確定するようなガントチャートを作成せよ。ただし、古い線の途中で選択し、そのまま線を伸ばせば範囲が変化し、また、線の途中で範囲を選択し、delキーを押せば線が途中で切れるようにすること。さらに、稼働日数は自動で計算するように作ること。
解答
エクセルの設定
タスク・氏名・年・月はすべてプルダウンで選択できるようにする。
Dataシートに次のように書いておく。
sheet1のガントチャートの画面に戻ってプルダウンメニューを作る。
プルダウンの作り方は、エクセルメニュー>データ>入力規則とやる。
次に1日~31日までのところに
=DATE($E$2,$E$3,COLUMN()-5)
を入れてオートフィルをかける。
曜日のところには
=TEXT(F5,"aaa")
といれ、オートフィルをかけて31日までの曜日を作る。
稼働日の計算は =SUM(F6,AJ6) を最上位に入れて、オートフィルで下までコピーする。
条件付き書式で1が入ったところをグリーンに塗る。(1はVBAで入れる)
またVBAで1を入力したときにそれを表示させないようにするために、F6~AJ16の範囲を選択し、セルの書式設定のユーザー定義で、;;;とセミコロンを3つ打つと画面表示しない。(ただし、ダブルクリックすると1は見える。)
VBAのコード
Option Explicit
Sub ボタン3_Click()
Dim strtRow As Integer, endRow As Integer
Dim rng As Variant, rngs As Variant
rngs = Split(Selection.Address, ",")
For Each rng In rngs
With Range(rng)
strtRow = .Cells(1, 1).Row
endRow = .Cells(.Rows.Count, 1).Row
End With
Range(Cells(strtRow, "F"), Cells(endRow, "AJ")).ClearContents
Range(rng) = 1
Next rng
End Sub
コードは以上である。注意して欲しいのは、ユーザーフォームのときとは違い、コマンドボタンをセルに挿入し、右クリックしてマクロの登録>編集とやって作ったものなので、ボタン3_Click()という変な名前になっている。
操作方法
操作は簡単で、プルダウンでタスクと氏名、年・月を選んだら、タスクに合わせて線を引くだけである。
線の途中およびすべてを削除したい場合は、範囲を選択してdelキーを押せばいい。
範囲を変更する場合は、古い線にかぶさっていようといまいと、新しく線を引きなおして実行ボタンを押せばいい。
もちろん、新規でひくときは、範囲を選択して実行ボタンを押す。
サイトご利用方法
次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。
google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。