■3-5 マクロ実行スタート方法の各種テクニック例
人間が手作業で行っていたExcelの操作を自動的に処理できるようにしたマクロ(=プログラム)は、VBA
とかマクロを知らないユーザーもスタートボタンを押せば自動的に処理が完了するのが理想です。

マクロ実行のスター方法は色々ありますが、便利な実行方法を紹介します。各種方法を理解しユーザー
に喜ばれるような方法を選んでください。



(1)フォームコマンドボタンから実行例
 シートへボタンを貼り付けて実行の場合、ActiveXコマンドボタン  (画面40参照)でも見た目は
フォームコマンドボタンと同じボタンを設定でき ます。しかし、シートにActiveXコマンドボタンを貼り付
けて使用の場合は ボタンがクリックされた時実行するプロシージャを別に作成する必要があり
 面倒なので、Excel95からあったフォームコマンドボタンの使用をお勧めします。


[1]マニュアルでコマンドボタン設定例
スタートボタン設定のもっとも初歩的な方法です。 マクロ作成途中のデバッグでもこのボタンを仮設置
して、ボタンクリックで簡単に何回もマクロ実行ができるなど便利なボタンであり、中級以上の方には
説明は不要と思いま再確認の意味で設定方法を記述しました。

【Excel2007/2010】
@Excelブックを開く(普通は、ボタンに登録したいマクロが入っているブック)
A メニューの「開発」「挿入」で(フォームコントロール)(ActiveXコントロール)
 のダイアログ表示(画面40参照)。
B フォームコントロールのコマンドボタンをクリックで、マウス矢印がが十字
  に変わるので、シートの設定したい場所にボタンを書きます。
C ボタンを書き終えると「マクロ登録」ダイアログが表示される。
 ・マクロの入ったブックにボタンを設定した場合はダイアログにマクロ名が
  表示されているので、登録するマクロを選び「OK」クリック。
 ・マクロ登録や変更は、ボタンを右クリックでショートカットの「マクロの登録」
  からもできます(画面40a参照)
D ボタンの表題は、右クリックでボタンを選択状態にして再度左クリックで、
  文字が記入できる状態になります。
Eボタン作成後ブックを保存すれば、次回からはボタンは表示されます

【Excel2003】
@ Excelブックを開く(ボタンに登録したいマクロが入っているブックを開く)
Aメニューの「表示」「ツール」「フォーム」でフォームのダイアログ表示
  以下B〜EはExcel2010と同じです。

画面40 コントロールボタン表示ダイアログ


画面40aクロ登録ショートカットメニュー



[2]マクロでコマンドボタン設定例
マニュアルでシートにボタンを設置する方法を記述しましたが、この操作はExcel2010でも2003でも
自動記録でマクロを作成できます。ただし表題文字も日本語で記入すると約20ステートメントと大きき
なりますが、整理すると以下の3行になります。
Sub ボタン表示()
Call ボタン削除
    ActiveSheet.Buttons.Add(162.75, 27, 96, 23.25).Select
    Selection.OnAction = "Macro_test"
    Selection.Characters.Text = "マクロ実行"
    Range("A1").Select
End Sub
----------------------------------------------------------------
Sub ボタン削除()
    For Each zu In ActiveSheet.Shapes
       If InStr(1, zu.Name, "AutoShape", 1) = 0 Then
          zu.Delete
       End If
    Next
End Sub




(2)ショートカットキーからの実行例
キー操作でマクロを実行できれば、これも誰でも簡単にマクロ実行をスタートできます。
(本設定例では、「Ctrl+q」キーで実行します)


[1]マニュアルでショートカットキーの設定例
以下にExcel 2010とExcel 2003のショートカットキーの設定方法を示します。

【Excel2007/2010】
@ Excelブックを開く(普通はボタンに登録したいマクロが入っているブック)
A リボンの「開発」→「マクロ」→「登録するマクロを選択」する
B 「オプションボタン」をクリック
C ショートカットキーを入力 (画面41参照)
D 「OK」ボタンクリック

【Excel2003】
 メニューバーの「ツール」→「マクロ」→「マクロ」の マクロ選択ダイアログの表示までが少し異なりますが、
 その他は2010と同じです。

画面41 ショートカットキー登録ダイアログ



[2]マクロでショートカットキーを設定例
 ショートカットキーへ登録の操作は自動記録できます。記録されたステータスをマクロに組み込めば、
マクロ処理でショートカットキーは登録できます。

Sub ショートカットキー1()
    Application.MacroOptions Macro:="Macro_test", _
    Description:="", ShortcutKey:="q"
    MsgBox "「Ctrl」+「q」でマクロ「Macro_test」実行を設定しました。"
End Sub
---------------------------------------------------------------
Sub ショートカットキー2()
    Application.OnKey "^{e}", "Macro_test"
    MsgBox "「Ctrl」+「e」でマクロ「Macro_test」実行を設定しました。"
End Sub
【補足】大文字で入力した場合は[Ctrl]+[Shift]+[E]となります。


【参考351a】Excelが使用中のショートカットキー
 キーを登録するとこちらが優先され、Excelの標準機能で通常実行する機能が実行できなくなります。
どのキーを指定するか注意して選ぶ必要があります。
なお、Excelが使用中のショートカットキーを表8に示します。Onkeyメソッドでのキー表記は、1-7節参照。
「Ctrl+Shift+○例」を表8aに示す(Shift+○例は省略)。

【表8 Excelが使用済みのショートカット一覧表】


【表8a ショートカット「Ctrl+Shift+○例」】
【キー操作】 【操作内容】
Ctrl+Shift+9 非表示にしている行を再表示します。
Ctrl+Shift+0 非表示にしている列を再表示します。
Ctrl+Shift+Home 選択範囲をワークシートの先頭のセルまで拡張
Ctrl+Shift+End 選択範囲をデータが入力されている範囲の右下端のセルまで拡張
Ctrl+Shift+↑↓←→
 
選択しているセルと同じ行や列にある
データが入力されているセルまで選択範囲を拡張
Ctrl+Shift++ 空白のセルを挿入します。
Ctrl+Shift+*
 
アクティブ セル領域の選択
(選択しているセルを含み、空白の行と列で囲まれているデータ領域)
Ctrl+Shift+[ 選択範囲で数式によって、直接的または間接的に参照されているセルをすべて選択
Ctrl+Shift+^ [標準] 表示形式を設定します。
Ctrl+Shift+$ [通貨] 表示形式 (\-1,234) を設定します。
Ctrl+Shift+% [パーセンテージ] 表示形式 (小数点以下の桁数 0) を設定します。
Ctrl+Shift+# [日付] 表示形式 (yyyy/m/d) を設定します。
Ctrl+Shift+! 桁区切りの表示形式を設定します。
Ctrl+Shift+& 外枠の罫線を設定します。
Ctrl+Shift+_ すべての罫線の削除の実行


【参考351】2つのショートカットキー設定方法の違い
ショートカットキーを設定するマクロは、「キー設定1」「キー設定2」マクロの2種類あります。
マニュアルで設定を自動記録すると「キー設定1」のMacroOptionsメソッドが記録されます。どちらを実行で
も[Ctrl]+[q]のショートカットキーが設定され同じ結果になります。しかし、MacroOptionsメソッドで設定は
「キー設定1」を実行したブックが開いているときだけショートカットキーが有効になります。

一方OnKeyメソッドで設定した場合は、「キー設定2」が記述されたブックを開いていない状態でショート
カットキーを押したとしても、Excelを終了するまでの間は、Excelはその「キー設定2」が記述されたブック
を開いて実行しようとします。

Sub キー設定1()
    Application.MacroOptions Macro:="Macro_test", ShortcutKey:="q"
    MsgBox "「Ctrl」+「q」でマクロ「Macro_test」実行を設定しました。"
End Sub
-----------------------------------------------------------------
Sub キー設定2()
    Application.OnKey "^{q}", "Macro_test"
    MsgBox "「Ctrl」+「q」でマクロ「Macro_test」実行を設定しました。"
End Sub




(3)ファンクションキーからマクロ実行例
前項のマクロと殆ど同じですが、キーとしてファンクションキーを指定すれば指定したファンクションボタン
をクリックでマクロを実行できます。本例では、[Ctrl]+[F10]キーでマクロを実行します。

Sub ファンクションキー()
    Application.OnKey "{F10}", "Macro_test"
    MsgBox "「F10」キーでマクロ「Macro_test」実行を設定しました。"
End Sub


[1]Excelのファンクションキー34種の使用状況一覧表
ファンクションキーで操作できることはファンクションキーを使用すると、Excel操作が楽になります。
表9はファンクションキーの使用状況の一覧表です。よく行う操作がファンクションキーでできないか
この一覧表を見て確認してみてください。

なお、ファンクションキーを設定する場合は、通常のExcel操作に影響しないように注意して使って下さい。
【表9 ファンクションキー使用状況】
  Ctrl Alt Shift 説明
F1
 
 
 
      [Excel ヘルプ] 作業ウィンドウを表示
Ctrl     リボンの表示と非表示を切り替
  Alt   現在の範囲からグラフを作成
  Alt Shift ワークシートを挿入
F2
 
 
      アクティブなセルの内容の最後にカーソルを配置
    Shift セルのコメントを追加または編集
Ctrl     印刷プレビュー ウィンドウを表示
F3
 
      [名前の貼り付け] ダイアログ ボックスを表示
    Shift [関数の挿入] ダイアログ ボックスを表示
F4
 
      直前のコマンドまたは操作を繰り返します
    Shift 選択したブック ウィンドウを閉じます
F5
 
      [ジャンプ] ダイアログ ボックスを表示
Ctrl     選択したブック ウィンドウを元のサイズに戻します。
F6
 
 
      分割されているワークシートの次のウィンドウ枠に移動する
    Shift 分割されているワークシートの前のウィンドウ枠に移動する
Ctrl     複数のブックのウィンドウが開いているときに次のブックウィンドウに移動する
F7
 
      [スペルチェック] ダイアログ ボックスを表示
Ctrl     ブックのウィンドウが最大化されていない場合「移動」コマンドを実行する
F8
 
 
      拡張選択モードを切り替えます
    Shift 選択範囲を追加する
Ctrl     ブックのウィンドウが最大化されていない場合「サイズ変更」コマンドを実行する
F9
 
 
 
 
      開いているブックのすべてのワークシートを計算する
    Shift 作業中のワークシートを計算します
Ctrl Alt   開いているブックのすべてのワークシートを計算します
Ctrl Alt Shift 要計算としてマークされていないセルも含め、開いているブックのすべてのセルを計算します
Ctrl     ブック ウィンドウを最小化します。
F10
 
 
 
      キー ヒントをオンまたはオフにします
    Shift ショートカットメニューを表示する
  Alt Shift スマート タグのメニューまたはメッセージを表示
Ctrl     選択したブック ウィンドウを最大化
F11
 
 
      現在の範囲からグラフを作成します
    Shift ワークシートを挿入します
  Alt   Microsoft Visual Basic Editor を起動します
F12       [名前を付けて保存] ダイアログ ボックスを表示




(4)ブックオープンで自動実行例
Workbookオブジェクトの「Open」イベントは、ブックが開いた時にイベントが発生します。したがって、
ブックが開いた時Workbook_Open()プロシージャーに記述したマクロが実行されます(画面42参照)。

【Excel2010/2007/2003】
「ThisWorkbook」コードウインドウのOpen()プロシージャに、最初にに実行するマクロを記述すれば、
ブックが開いたとき自動的に実行されます。

画面42 ブックオープンで自動実行のプロシージャ例



【参考352】「Public」の設定は「標準モジュール」で宣言すること
変数の有効範囲についてですが、前の章で「Public」で宣言した変数は全モジュールで共通に使用で
きますと記述しましたが、これは「標準モジュール」に記述した場合です。「標準モジュール」に宣言した
「Public」変数は、他のオブジェクトモジュール(ThisWorkbookモジュール/各シートのモジュール/
ユーザーフォームモジュール)でも有効ですが、オブジェクトモジュールに「Public」変数を記述の場合
はDimで宣言と同レベルとなり他のモジュールでは有効にらない点を注意してください。


[1]Excel 95からあった「AUTO_OPEN」自動実行プロシージャ
ブックが開いたとき実行するイベントプロシージャを説明しましたが、それ以外にも、イベントプロシー
ジャのWorkbook_Open()を使用しないで、10年以上前にExcel5.0/95で作成した自動実行マクロが
Excel2010でも正常に実行できています。
それは、標準モジュールへ普通に作成したSubプロシージャー名を、「AUTO_OPEN()」に変更するだけ
です。このAUTO_OPEN()はExcel95での標準機能でしたが、Excel2010で使用しても問題ないようです。
Sub Macro_test()
    Range("A1").Value = "ABCDE"
    Range("B3").Value = "12345"
    Range("A3").Value = "abcd"
End Sub
-------------------------------------------------------
Sub AUTO_OPEN()
    Range("A1").Value = "ABCDE"
    Range("B3").Value = "12345"
    Range("A3").Value = "abcd"
End Sub


[2]Excel 95からあった「AUTO_CLOSE」自動実行プロシージャ
Excel95の「AUTO_OPEN()」の記載をしたが、その逆の「Sub AUTO_CLOSE()」も生きているので紹介します。
興味のある方は使ってみてください。

「ThisWorkbook」コードウインドウ
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   ' Cancel = True
     MsgBox "ブックを閉じます(閉じるイベント確認)"
End Sub
普通の標準モジュール
Sub AUTO_CLOSE()
MsgBox "ブックを閉じます(Excel95分確認)"
End Sub

Sub イベントOFF()
    Application.EnableEvents = False
End Sub
※上記BeforeCloseイベントは、これで無効にできます。なお、Excel95文の方は無効になりません
---------------------------------------------------------------
Sub イベントON()
    Application.EnableEvents = True
End Sub


【参考353】 信頼できないExcelブックをマクロ無効にして開く例
知らない方から来たファイルはウイルスガードの為には開かないことが一番よいが、やむえず開く場合
は下記マクロを使用して開けば Auto_Openとイベントマクロは実行しません。

Sub ファイルを開く1()
Dim fff As String
fff = Application.GetOpenFilename(Title:="開くファイルを指定")
     If fff = "False" Then
        MsgBox "ファイルを1個指定して下さい"
        Exit Sub
     End If
 イベントマクロを無効にする
 Application.EnableEvents = False
 
 Workbooks.Open Filename:=fff, Editable:=True
End Sub
------------------------------------------------------------
Sub イベント解除()
    Application.EnableEvents = True
        MsgBox "イベントを有効にしました"
 
End Sub




(5)セルをクリックでマクロを実行例
前述でブックイベントの説明をしましたが、この項目はシートイベントの説明で、セルをダブルクリック
した時発生のイベントプロシージャで、そのセルデータを取得し処理するマクロ例です。

イベント発生で実行するプロシージャは、各シートのコードウインドウへ記述します。本マクロ例では
「Sheet1」のコードウインドウへ実行マクロを記載ですが、詳しくは画面43を参照して下さい。

画面43 「Sheet1」コードウインドウ例


「Sheet1」コードウインドウ
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Dim celr As Integer
Dim celc As Integer
Dim code As Integer
    celr = ActiveCell.Row
    celc = ActiveCell.Column
    If celc <> 1 Then
       Exit Sub
    End If
      code = Cells(celr, 1)
    If IsNumeric(code) = False Then
        MsgBox "数字が対象です"
        Exit Sub
    End If
    Call イベント例(code)
End Sub


Dim dai As String
Sub イベント例(bango)
On Error Resume Next
dai = ""
Call 表題3(bango)
Cells(1, 1).Value = "Dialogs(" & bango & ")【" & dai & _
】を表示中です。
 
  Application.Dialogs(bango).Show
  If Err = 1004 Then
    Cells(1, 1) = ""
    MsgBox "「" & bango & "」は表示できません"
    On Error GoTo 0
    Exit Sub
  End If
End Sub
-----------------------------------------------------------
Sub 表題3(ban)
Dim i As Integer
For j = 3 To 76
    If Cells(j, 1) = ban Then
        dai = Cells(j, 2)
        Exit For
    End If
Next
End Sub


[1] その他のシートイベントのプロシージャ例
前述は「BeforeDoubleClick」イベントでワークシートをダブルクリックで発生しますが、その他にもシート
に対して発生するイベントは多数ありますが、以下に主なシートイベントのプロシージャ例を紹介します。

「Sheet1」コードウインドウ
Private Sub Worksheet_Activate()
    MsgBox "Sheet1がアクティブになった"
End Sub
----------------------------------------------------
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Excel.Range, Cancel As Boolean)
    MsgBox "シ−ト上でダブルクリックされました"
End Sub
----------------------------------------------------
Private Sub Worksheet_BeforeRightClick _
(ByVal Target As Excel.Range, Cancel As Boolean)
    MsgBox "シ−ト上で右クリックされました"
End Sub
---------------------------------------------------
Private Sub Worksheet_Calculate()
    MsgBox "このシ−トのデ−タを再計算した"
End Sub
----------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
    rr = Target.Row
    cc = Target.Column
    MsgBox rr & "行" & cc & "列セルが変わりました"
End Sub
----------------------------------------------------
Private Sub Worksheet_Deactivate()
    MsgBox "Sheet1ががアクティブでなくなった"
End Sub
----------------------------------------------------
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
        MsgBox "ハイパーリンクがクリックされた"
End Sub
----------------------------------------------------
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
        MsgBox "ピポットが更新されました"
End Sub
----------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  If Target.Address = Cells(2, 2).Address Then
     MsgBox Target.Address & "のセルが選ばれた"
  End If
End Sub
これはセル"B2"が選ばれると実行します。
 



【戻る】    【Top画面】   【HPへ】