[Excel VBA] ボタンを押してVBAを実行

VBAプログラミング

 今までVBAでプログラムを作ってから、実行するときは、緑のボタンかF5キーで実行したと思うけど、もし実際にExcelを開いてそれを実行するときに、わざわざVisual Basicの画面を開いて実行するのは面倒だよね。それに他の人にも使わせるとしたら、その人のExcelにはそもそも開発タブが表示されてない可能性もある。

 そこで、実行する簡単な方法、Excelのシートにボタンを付けて、ボタンを押したときにプログラムを実行させるやり方を教えるよ。

ボタンを配置してプログラムを自動生成

 ボタンを付けるのはとても簡単、まずは開発タブの挿入をクリックして、フォームコントロールという一覧の中でボタンというのを探してクリック。

 図形を挿入するみたいに、ボタンを設置したい場所でマウスをドラッグして、ボタンの大きさを決めると、↓こんな画面が出る。

 そのまま新規作成をクリックしてもいいし、何かわかりやすいようにマクロ名を変更してから新規作成でもいいよ。

 そうすると、Visual Basicの画面が開いて、↓のように標準モジュールの中に自動でコードが出来上がるよ。

シートモジュールから標準モジュールへの移動

 今までのブログで書いてきたプログラムをそのまま使うのであれば、まずはSheet1(シートモジュールと言います)に書いておいたコードをそのままコピーして、上の画面の End Sub の後で改行してから貼り付けよう。その後に上の画面の Sub ボタン1_Click() の次の行に Call xxx(プログラム名)のように記述します。↓こんな感じね。

Sub ボタン1_Click()

    Call ColoringCells

End Sub

Sub ColoringCells()

    '行数カウンター
    Dim RowCounter As Integer

    'データが始まるのは2行目から
    RowCounter = 2

    '1列目が空白になるまでループ
    '2行目の1列目からチェックするよ。途中で空白があったらそこで繰り返しはおしまいになるよ。
    Do Until Cells(RowCounter, 1) = ""

        '株式会社が名前についていたら、セルをオレンジ。ついてなければ白
        'Instrという関数は特定の文字が含まれていたら、その文字の開始位置を返すよ。
        If InStr(1, Cells(RowCounter, 2), "株式会社") > 0 Then
            'ColorIndex = 45はオレンジを表しているよ
            Cells(RowCounter, 2).Interior.ColorIndex = 45
        Else
            'ColorIndex = 2は白を表しているよ
            Cells(RowCounter, 2).Interior.ColorIndex = 2
        End If

        RowCounter = RowCounter + 1

    Loop

End Sub

Call というのは、Subを呼び出すという意味だよ。

シートの指定

この後がポイントなんだけど、以前の記事では↓のようにSheet1 のプログラムを動かしてたから、

 顧客マスタのシート内のセルの情報を操作していたことが暗黙の了解だったけど、今度はModule1という別のところにあるプログラムだから、顧客マスタのシート内のセルに対して操作をしていることをプログラムで書かないといけない。

とは言っても全然簡単で、cellsの前に 「Sheets(“顧客マスタ”).」 というのを付けてあげるだけで大丈夫。もしシート名が顧客マスタじゃなかったら、””の中をその名前に書き換えてね。↓こんな感じね。

Do Until Sheets("顧客マスタ").Cells(RowCounter, 1) = ""

完成したら、Sub ボタン1_Click() にブレイクポイントを置いて、ボタンをクリックしてみよう。

あとはステップ実行で問題なく処理が進むか確認してね。

もし出来れば練習で、もう一つボタンを好きな場所に追加して、今度はセルの色を元に戻す処理を書いてみよう。今ある色付けするSubをコピーして使い回して、色付けの箇所だけ修正してみてね。

ボタンを押す以外にも、実はVBAによく似たVBSというプログラムを作れば、誰かが直接ファイルを開かなくても実行する方法があるんだけど、それはまた今度説明します。

[Excel VBA] 最後の行ってどこ?
今回は割と地味な話題だけど実はExcelでVBAをやるときにはとても重要なことなんだけど、キミはExcelのデータの最後の行はどうやって判断するかな? 以前書いた記事では、特定の列の2行目から1行ずつループで下に移動して、空白に...

コメント

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