初心者オサムシがExcelのマクロと戦う戦闘ブログである
by オサムシ
タグ:イベントプロシージャ ( 3 ) タグの人気記事
試験メモ【イベントプロシージャ】/VBAエキスパート

イベントプロシージャ



イベントプロシージャとはExcel上で何か操作が行われたときに、それをマクロが感知してプロシージャを起動するという事

Excel上で変化が起こる事をイベントという訳だけど、もちろん変化が起こっただけじゃ、別に何の意味もない

そこに仕掛けをしておくからこそ効果があるんだよね

例えば、どこかのセルを書き換えたとか、右クリックをしたとか、Excelファイルを開いた(つまりWorkbookを開いた)とか

それを全て「イベントが起こった」という訳

いろいろ使い道はあるけど、シートにマクロボタンを設けて、それをクリックすれば別にイベントで反応させなくても良いんだけど、例えば、絶対に書き換えてはいけない書類ファイルがあったとする

それを上書き保存しちゃったらマズいから、「上書き保存をしようとしたら別名保存させるようにする」なんてのはどうだろう

上書き保存はマクロではSaveだけど、Saveというイベントが起こったら、BeforeSaveつまり「Saveの前に」別名保存させるのでオリジナルは上書きされないで済む

こんな風に「あったらマズイ」ときと「あったら便利」なときにも使える

イベントには以下リンク先のモノがある(全てではありません)

ワークシートに対するイベント/Excel マクロ
https://docs.google.com/spreadsheet/ccc?key=0Aq3SC7WlgWhMdHg2TGxGcnAzVXZ0cV9YSUtoVWRtWUE&usp=sharing

ブックに対するイベント/Excel マクロ
https://docs.google.com/spreadsheet/ccc?key=0Aq3SC7WlgWhMdEVBM3JaRGhiZlRjVWRaUHdCdjVZN2c&usp=sharing

書き方は、まずコードウィンドウでオブジェクトモジュールをダブルクリックで選択する

すると下画像の様なウィンドウになる
d0285354_2254519.jpg

左のセレクトボタンでWorksheetを選択すると、右のセレクトボタンに候補がでるので、そこから選択すればベースを打ち込んでくれる

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub


この書式がデフォで、最初から引数Targetまで用意してくれてる

Targetはともかく、書式に関してはこれじゃないとダメみたいですね

ちなみにイベントプロシージャ内で、イベントを起こさせたくない部分にはEnableEvensを使います

Application.EnableEvents = False
命令
Application.EnableEvents = True


イベントに関してはもう少し裏がありそうだけど、そんなに追及するとこじゃないのでこの程度でよし

あと一つ言うなら、イベントはオブジェクトモジュールでないと使えない

更にブックのイベントはオブジェクトモジュール内の「ThisWorkbook」モジュールでしか使えない

イベントプロシージャは乱用するととんでもない事になりかねないから、ほどほどにしようね。


オサムシじゃーなる
[PR]
by 03musi | 2013-02-11 22:55 | 試験メモ/VBAエキスパート
Select Case ステートメント/マクロ基礎

Select Case ステートメント



Select Case ステートメントは複数の条件から、該当した条件の処理を実行したいときに使います

書式は、この通り
Select Case 値 '値は主に変数やオブジェクトなど
Case 条件1
処理1
Case 条件2
処理2
Case 条件3
処理3
End Select


例)
A1セルに粗大ごみの重さを入力すると、料金が表示される仕組みを作ります

Select Caseとイベントプロシージャを組み合わせます

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Single '変数の型宣言
a = Range("A1") 'a にA1セルを代入
Select Case a 'Select Case ステートメント a がキー
Case Is <= 3 '一つ目の条件3Kg以下
MsgBox "料金は500円です " & a & "Kg"
Case Is <= 7 '二つ目の条件7Kg以下
MsgBox "料金は800円です " & a & "Kg"
Case Is > 7 '三つ目の条件7Kgを超える場合
MsgBox "別途見積もりが必要です " & a & "Kg"
Case Else 'Case Else は上記条件の全てに偽
MsgBox "入力に誤りがあります " & a
End Select
End Sub


1行目の()内 ByVal はこのプロシージャから子プロシージャに対して、オブジェクトを渡すときに、値渡し(⇔参照渡し)をする事を指します
詳しくは別の記事で。

"Is"は自分、つまりここでは"a"を表しています

この表記をCase 0 To 3 のような範囲指定することもできますし、Case 0,1,2,3 のようにカンマ区切りで、複数の値を指定することもできます

ただし、検証してみた限りでは、この指定方法を混在することはできないようです

例えばこのように
        Case 0,1,2,3
MsgBox "料金は500円です " & a & "Kg"
Case 4 <= 7
MsgBox "料金は800円です " & a & "Kg"
Case Is > 7
MsgBox "別途見積もりが必要です " & a & "Kg"

これは上手くいきませんでした

エラーは出ないものの、間違った処理がされてしまいました

調べた限りでは、設定などがあるという話は見つからず、理由も探せませんでした

Select Caseステートメントを使う場合は、注意してください

または解決策をご存じの方は、教えていただけると助かります

コメント&メッセージお待ちしております!osamushi

オサムシじゃーなる
[PR]
by 03musi | 2013-01-14 19:04 | マクロ 基礎
イベントプロジージャ基礎編/マクロ基礎

イベントプロジージャ基礎編/マクロ基礎



イベントとはオブジェクトに対して何か操作が行われた状態の事

セルでダブルクリックをした場合「RangeObject に対してダブルクリックというイベントが発生した」ことになります。

プロシージャとは、VBE(Visual Basic for Applications)での命令文の最小単位を指します
広義では"マクロ"もしくは"マクロの一部"というところかな

イベントプロシージャとは、イベントが発生したことをきっかけに、実行されるプロシージャ(つまりマクロ)です

イベントプロシージャは標準モジュールではなく、オブジェクトモジュールに書く必要があります
d0285354_23475020.jpg

画像赤枠の部分

標準モジュールに書いても、イベントプロシージャは実行されません

実際の構文や実行例は以前書いた イベントプロシージャ/マクロ基礎 を見てください

Excel基本の機能が使い辛くなったりするので乱用はできないけど、よく使うマクロは、イベントで実行させるとかなり効率化できるよ。osamushi

オサムシじゃーなる
[PR]
by 03musi | 2013-01-08 23:58 | マクロ 基礎


カテゴリ
試験メモ/VBAエキスパート
マクロ 基礎
マクロ 応用
Excel 基礎
Excel 応用
Office
日記
もくじ

ファン

フォロー中のブログ
初心者のためのOffic...
七里ヶ浜だより Lett...
はじめてのMac-Sup...
初心者のためのOffic...

検索

タグ

その他のジャンル