マクロでマクロボタンを2個作る

マクロ実行用のボタンが複数必要な場合もあります。ボタンをまとめて作るためのマクロを紹介します。

マクロボタンを横2つとか縦2つなど並べてみる

マクロでマクロボタンを2個作る

今度は、マクロのボタンを2個、横に並べて作りたいと思います。
もちろん、前回のコードを2回繰り返してもいいのですが、コードには、いろいろな書き方があるので、紹介しようと思います。
Excelバージョン:201320102007
(サンプルファイルは、こちらから 2010マクロ講座27回サンプルデータ

マクロ実行ボタンを2個作る

2010 マクロ講座26回のコードを2回繰り返しています。セルの指定方法を変えています。
セル1とセル2をオブジェクト変数として宣言しています。 そうすることで、オブジェクトのさまざまな要素を利用することができます。
Sub ボタン作成2個横() 
  Dim セル1, セル2
  Set セル1 = ActiveSheet.Cells(2, 2)
  Set セル2 = ActiveSheet.Cells(2, 4)
    With ActiveSheet.Buttons.Add(セル1.Left, セル1.Top, セル1.Width, セル1.Height)
        .Name = "ボタンB2"
        .OnAction = "ボタン1"
        .Characters.Text = "ボタン1"
    End With
    With ActiveSheet.Buttons.Add(セル2.Left, セル2.Top, セル2.Width, セル2.Height)
        .Name = "ボタンC2"
        .OnAction = "ボタン2"
        .Characters.Text = "ボタン2"
    End With
End Sub
実行すると、ボタンが2個作成されます。
マクロでボタンを複数作るマクロ1
作成するボタンの位置を変更する時は、Cells(2, 2)の部分で変更できます。 またRange("B2")のような指定方法でも同じです。

ボタンの位置を数値で指定

ボタンをセル上に、ピッタリ作成するのではなく、数値で指定する時は次の様に指定します。
Sub ボタンの位置とサイズ()
    With ActiveSheet.Buttons.Add(100, 10, 80, 20)
      .Name = "ボタン前"
      .Caption = "ボタン前"
      .OnAction = "ボタン前"
    End With
    With ActiveSheet.Buttons.Add(200, 10, 80, 20)
      .Name = "ボタン後"
      .Caption = "ボタン後"
      .OnAction = "ボタン後"
    End With
End Sub
実行すると、このようにボタンが作成されます。
マクロでボタンを複数作るマクロ2

ボタンの位置を知らせる

作成したボタンに登録するマクロとして、ボタン前とボタン後という名前のマクロを作成して実行してみます。
ボタンの位置を知らせるには、Application.Callerプロパティを使います。Application.Callerプロパティは、Visual Basic を呼び出した方法についての情報を返します。
以下のボタン前マクロでは、左上のセルアドレスを返します。またボタン後マクロでは、セルの位置をサイズを数値で返します。
Sub ボタン前()
    MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
End Sub
Sub ボタン後()
    MsgBox ActiveSheet.Shapes(Application.Caller).Top
    MsgBox ActiveSheet.Shapes(Application.Caller).Left
    MsgBox ActiveSheet.Shapes(Application.Caller).Width
    MsgBox ActiveSheet.Shapes(Application.Caller).Height
End Sub
ボタン前をクリックすると、TopLeftCell.Addressが返されます。 マクロでボタンを複数作るマクロ3
ボタン後をクリックすると、Top、Left、Width、Heightが順に返されます。
マクロでボタンを複数作るマクロ4

ボタンを縦に2つ作るマクロ

ボタンを縦に2つ作るマクロは、横につくるマクロのコードのCells(2, 2)の部分を少し変更するだけです。
  Set セル1 = ActiveSheet.Range("C2")
  Set セル2 = ActiveSheet.Range("C4")
実行すると縦に2つのボタンが作成されます。
マクロでボタンを複数作るマクロ5