即効テクニック

その他関連のテクニック

メニューを実行する

(Excel 97/2000/2002/2003)
セル範囲A1:E32をA列で並べ替えるには、たとえば次のようにします。

Sub Macro1()
    Range("A1:E32").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        SortMethod:=xlPinYin, DataOption1:=xlSortNormal
End Sub
これは、上記の操作をマクロ記録したコードです。 マクロ記録では、並べ替えで使用できるすべての引数が記録されますし、それぞれの引数をヘルプで調べることは、VBAの学習にもつながりますが、ツールバーの[昇順で並べ替え]を行うだけなのに、少々めんどうな気もしますね。 ツールバーやメニューに表示されている機能は、すべてVBAから操作できます。 専用のオブジェクトやメソッドが用意されていますので、詳細な制御が可能です。 しかし、Excelの標準機能を単純に呼び出すだけなら、オブジェクトやメソッドなどを調べるまでもなく実行することが可能です。 それは、ツールバーのボタンが"押された"ことにすればいいのです。 ツールバーやメニューに登録されているコマンドはCommandBarControlオブジェクトで表されます。 このCommandBarControlオブジェクトのExecuteメソッドを実行すると指定したボタンやコマンドをクリックしたのと同じ動作になります。 次のコードは、[標準]ツールバーの[昇順で並べ替え]ボタンがクリックされたことにします。
Sub Sample2()
    CommandBars("Standard").Controls(18).Execute
End Sub
CommandBars("Standard")が[標準]ツールバーを表し、その中のControls(18)が[昇順で並べ替え]ボタンに該当します。 指定した18は、[昇順で並べ替え]ボタンのインデックス値です。 ボタンのインデックス値を調べるには次のようにします。
Sub Sample3()
    Dim c
    For Each c In CommandBars("Standard").Controls
        Debug.Print c.Caption & c.Index
    Next c
End Sub
なお、実行したいボタンの位置が変更されていると、上記のようなインデックス値の決め打ちは危険です。 安全性を高めるなら、次のように実行するボタンのIDを指定して、ボタンを検索するのがいいでしょう。
Sub Sample4()
    Dim ctr
    Set ctr = CommandBars.FindControl(ID:=210)
    ctr.Execute
End Sub
[昇順で並べ替え]ボタンのIDは210です。 このIDもSample3を応用して調べることができますね。 Executeメソッドの便利なところは、ボタンがクリックされた動作をエミュレートしてくれることです。 これは、Excelの標準機能を実行するだけでなく、色パレットを開くなどにも有効です。 次のコードは、[書式設定]ツールバーの[フォントの色]ボタンをクリックされたことにして、色パレットを表示します。
Sub Sample5()
    CommandBars.FindControl(ID:=401).Execute
End Sub