ド素人でも学べる ExcelVBA 012 ボタン

ブログ

ユーザーズインターフェースを設置

 前回の表データの抽出プログラムにインターフェースを付けて、自分以外のユーザーにも使ってもらえるようにしよう。
 図のようにドロップダウンリストとボタンを設置することで、担当者ごとのデータを抽出できるようにする。

シート上の設定

 プログラムを作るまえに、シート上のインターフェースを作っていこう。

担当者のドロップダウンリスト

 今回はF1セルに入力規則でドロップダウンリストを設置して、そこから担当者を選べるようにする。
ドロップダウンリストを設定するプログラムもVBAで書く事ができるが、ここではシート上の操作で実現することにしよう。

 まず、メニューの「データ」からデーターツールの中にある「入力規則」のアイコンをクリックする。

 するとダイアログが出るので、以下のように設定する。
入力値の種類は「リスト」。元の値には、「山田,小林,佐藤,(クリア)」と入力する。

 (クリア) に関してはそれまでのデータを消去する時に使う。

抽出するデータ

 抽出するデータは、担当者はドロップダウンリストに表示されるので、日付、品名、金額の3つにする。
シートの G1セル、H1セル、I1セルにそれぞれ、日付、品名、金額と項目名を記入しておこう。

プログラムを作る

 プログラムは前回の最後に作ったプログラム(macro6)を改造していけば良いだろう。
変更部分は、抽出先がG,H,I列に変わる事。そして品目名で検索していたのが、担当に変わる事などだ。
検索する値は、F1セルにある値で抽出する。もし「(クリア)」だった場合は、値をクリアするだけだ。

Sub macro8()
    Dim i As Long
    Dim lastRow As Long, row As Long
    
    lastRow = Cells(Rows.Count, "G").End(xlUp).row   '(1)
    
    If lastRow < 2 Then lastRow = 2   '(2)
    
    Range("G2:I" & lastRow).Clear   '(3)
    
    If Range("F1") = "(クリア)" Then Exit Sub   '(4)
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).row   '(5)
    row = 2          '(6)
    For i = 2 To lastRow
        If Cells(i, "D") = Range("F1") Then   '(7)
            Range("A" & i & ":C" & i).Copy
            Cells(row, "G").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            row = row + 1
        End If
    Next i
End Sub

 少々プログラムが長くなったので、一応解説しておく。これまでやった事のあるコマンドばかりなので一行一行の詳細な説明は良いだろう。
 (1)では、抽出列の最終行を得ている。(2)では、データが無かった場合データ範囲を2行目に矯正する。
(3)で以前のデータをクリア。(4)は新規のコードだが、F1セルの値が “(クリア)” だった場合、データをクリアした時点で処理は終了するので、Exit Sub で処理を終えている。

 (5)では、データ部分の最終行を得ている。(6)で抽出行の初期値をセットしている。
(7)は条件分岐部分で、F1セルの値とD列の値を比較している。もし同じ場合は、コピーして抽出列に貼り付けを行う。

 尚、PasteSpecial Paste:=xlPasteValuesAndNumberFormats という覚えずらいコマンドの入力は入力候補機能を利用すると便利だ。以下のページに使い方の詳細があるので確認してほしい。
 ・Cellsで入力候補が表示されない

ボタンを設置する

 シート上にボタンを設置して、上記のプログラムを実行できるようにしてみよう。

 ボタンは、Excelシートの「開発」メニューから「挿入」をクリックして「フォームコントロール」のボタンを選択しよう。下に ActiveX というのがあるが扱いが(今は)難しいのでこちらを使う。

 ボタンをクリックしたら、シート上をドラッグするとボタンを設置できる。

 ボタンが現れたらすぐに、以下のようなダイアログが現れてボタンを押した時に実行されるプロシージャを選ぶ事ができる。

 ここでは、先程書いた macro8 を選択して「OK」を押す。

この「マクロの登録」ダイアログは、ボタンを右クリックする事で再度現れるので、後からプロシージャを変更することも可能だ。

 マクロを選択して「OK」ボタンを押すと、ボタンの名前を変更できるようになる。
下のようにボタンの周りに丸印がある時は、ボタンの大きさや名前を変更できる。

今回は「抽出」という名前に変更してみよう。

 ボタン以外の場所をクリックすれば周囲の丸印は消えて、ボタンが使えるようになる。
もう一度、編集モードにしたい場合は右クリックすれば良い。

 これでプロシージャを実行できるようになった。F1セルの値を変更して「抽出」ボタンを押してみよう。
担当者のデータが抽出されるはずだ。

まとめ

 今回の表は、データが10行までしかないが、数百行のデータでもキチンと機能するはずだ。
これまでプログラムの実行は、F5キーやVBEの実行ボタンを押してきたが、シート上にボタンを設置して、そこに登録する事でいつでもプログラムを実行する事ができるようになった。

 別のプロシージャを実行したい場合は、ボタンを右クリックして、「マクロの登録」をクリックすればダイアログが出て、ボタンに登録するプロシージャを選ぶ事ができる。

 簡単ではあるが、ユーザーが扱えるようなプログラムが完成した事になる。プロシージャをボタンに登録する方法は、是非とも使えるようになってほしい。
 同じプログラムで良いので、何度か作れば身に付いてくるだろう。習得するには繰り返しが大事だ。

コメント

タイトルとURLをコピーしました