その他関連のテクニック

マクロでボタンを挿入する

(Excel 97/2000/2002/2003/2007)
作成したマクロを実行するために、ワークシート上にボタンを配置することがあります。
手作業で行うときは、[表示]-[ツールバー]-[フォーム]で[フォーム]ツールバーを開き、[ボタン]をクリックしてからワークシート上をドラッグします。
実行すると[マクロの登録]ダイアログボックスが表示されるので、ボタンをクリックしたときに実行されるマクロを登録します。

この操作をマクロで行うには次のようにします。

Sub Sample1()
    With ActiveSheet.Buttons.Add(Range("B2").Left, _
                                 Range("B2").Top, _
                                 Range("B2:C3").Width, _
                                 Range("B2:C3").Height)
        .OnAction = "Sample"
        .Characters.Text = "Click me"
    End With
End Sub

Sub Sample()
    MsgBox Now
End Sub
ボタンはButtonsコレクションで操作できます。追加するときはAddメソッドです。 Addメソッドの引数には、ボタンを挿入する位置と大きさを指定します。 上記のSample1では、セルB2を左上として、セル範囲B2:C3の大きさのボタンを挿入します。 ボタンをクリックしたとき実行されるマクロは、OnActionプロパティで指定します。 実行したプロシージャ名を文字列で指定してください。 ボタンの表面に表示する文字列はCharacters.Textプロパティに指定します。 シートに挿入されている全てのボタンを操作するには、同様にButtonsコレクションを操作します。 次のコードは、シート上に挿入されているボタンのキャプションと登録されているマクロ名をアクティブシートに表示します。
Sub Sample2()
    Dim B As Object, i As Long
    For Each B In ActiveSheet.Buttons
        i = i + 1
        Cells(i, 1) = B.Characters.Text
        Cells(i, 2) = B.OnAction
    Next B
End Sub
応用すると、特定のボタンだけ削除するなども可能です。 次のコードは、マクロが登録されていないボタンを全て削除します。
Sub Sample3()
    Dim B As Object
    For Each B In ActiveSheet.Buttons
        If B.OnAction = "" Then B.Delete
    Next B
End Sub