Excel VBA 事例 演習 基礎問題+α part6

はじめに

ここで作成するガントチャートは、Excelの機能が8割、VBAの機能が2割程度である。

年と月を指定すると、固定した日にちとそれに対応した曜日が設定される。月の日付ごとのガントチャートといえる。

開始日と終了日の項目を外した。理由はチャートの図で読み取れば十分だと判断したからである。

シートは2枚必要で、1枚目はプルダウンメニューを出すためのDataシート、もう一枚はガントチャートのシートである。

問題

左が何もないチャート。右が工程を記入したチャート

問題)チャートに線をいれ、実行コマンドボタンを押せば線が確定するようなガントチャートを作成せよ。ただし、古い線の途中で選択し、そのまま線を伸ばせば範囲が変化し、また、線の途中で範囲を選択し、delキーを押せば線が途中で切れるようにすること。さらに、稼働日数は自動で計算するように作ること。

解答

エクセルの設定

タスク・氏名・年・月はすべてプルダウンで選択できるようにする。

Dataシートに次のように書いておく。

Dataシートの設定。プルダウンメニューに表題は含めない

sheet1のガントチャートの画面に戻ってプルダウンメニューを作る。

プルダウンの作り方は、エクセルメニュー>データ>入力規則とやる。

sheet1のガントチャートの画面でデータの入力規則を選択

設定したい入力リストを選択し、入力値の種類をリストにし、範囲をDataシートから表題を除いて選択する。これをタスク・氏名・年・月と行う

次に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などで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。