見出し画像

第25回 VBA会 登壇者 りゅうりゅう

VBAの悩みはVBAerに聞け
開催日時:2021年10月2日 20時~
登壇者 :りゅうりゅう@blacklist_ryu
テーマ :イベントでウェーイ!

本日の登壇は妄想VBAでおなじみの りゅうりゅう さん。
VBAのイベントに関するマクロを紹介してくれるらしぃぞぉぉ。

画像1

事前確認

画像2

(意外と真面目な性格なのか?)

自己紹介

画像3

(練習しすぎで棒読みw これは緊張してんなw)

過去ネタマクロの紹介

画像4

画像5

画像6

(音もスゲー!)

画像7

(これは結合できないwww)

画像8

画像9

(これはイライラする)

画像10

画像11

(これは癒される。音楽付き)

画像12

画像13

(西島秀俊≠りゅうりゅう)

画像14

画像15

画像16

画像17

本題のイベントマクロ

画像18

画像19

画像20

(いや想像しないよ)

画像21

画像22

(ないわww)

画像23

画像24

画像25

画像26

画像27

画像28

(「気になる方は勝手にググってください」っておいw)

実際に使っている現役Excelマクロサンプル

電話受付の対話履歴を記録していくツール

画像29

画像30


セルのSelectionChangeイベントを使って右にでるメニューを表示している。

画像31

入力内容も「1」を入力するだけで、指定の文字に置き換わる。
これはChangeイベントを使って実現している。

画像32

選択メニューは隣列に記載済で、その列の表示・非表示を切り替えているだけ。

画像33

カーソルを右に4列目に移動すると基幹システム入力用文字列が作成され、
更に下に移動すると、実際に基幹システムへ入力される。

画像34

(これはよく考えられている)

画像35

(マウス操作不要でキーボード、なんならテンキーのみで入力が完結できる設計ですってよ、奥様)

次は座席配置ツール

コールセンターの座席配置は毎日変更・決めなきゃいけない。
いろいろな要望もある。
(仲がいいとか悪いとか?ww)
人数が多いとミスも起こる。出勤者の名前がないとモチベも下がる。

画像36

(おニャン子くらぶ・・・)

出勤メンバーは別シートから取り込み、ランダム配置ができる。
ラウンダー、チェック、発信など、、役割によって配置も制御できる。

設置後も名前をクリックするだけで名前の削除、再配置などができる。
これもSelectionChangeやChangeイベントなどで実現できる。
ダブルクリック後にクリックするとメンバーが入れ替わる。
DoubleClickイベントも活用。

現場の要望は様々。一つずつヒアリングして構築してます。

(新人はりゅうりゅうさんの近くに配置されるらしいw)

マクロの説明

画像38

シートのイベントはSheetオブジェクトに配置する。

画像39

画像40

SelectionChageで選択範囲のアドレスを表示する。

では、先ほどの番号入力のマクロの簡易版の説明

画像37

まずセルの選択位置を変えたら、マクロが起動する。
・全部非表示にする
・2列でない場合はそのまま終了
・2列目、3列目、4列目を選択して表示する。

次に入力。例えば10を入力すると・・

画像41

画像42

・Application.EnabeleEvents=Falseでイベントを一旦止める。
・s入力値を取得。「10:」という文字列を作る。
・それをFindメソッドで検索し、その値を再記入する。
・Application.EnableEvents=Trueでイベント再開。

席替えツールの機能説明

ダブルクリック後に別のセルをクリックすると入れ替わる。

画像43

・ダブルクリックしたセルの値を記録する。
・ダブルクリックしても編集モードにしないために
 Cancel=Trueで処理を中止するところがポイント。
・SelectionChangeで選択先に転記される。

便利マクロ説明(ハイパーリンク)

画像44

画像45

画像46

このハイパーリンクは自分自身のセルを指定している。

画像47

ハイパーリンクをクリックしたら発動するイベント。
ボタンを全行に配置するのは大変だし、重いし・・・。

(確かにユーザが実行しやすいな、これ)

次のマクロ(ダブルクリックイベント)

ダブルクリックすると1ずつ増える。

画像49

でもダブルクリックって1セルしか選択できない。
複数選択したいときは・・・

範囲選択して右クリックイベントでやるといいよ。

画像49

(なるほど・・・)

数式を壊せないマクロ

画像50

画像51

(ほんとだ入力できない)

これはデータの入力規則でできる

画像52

ただし入力規則は、「実際に入力したときだけ」。コピーしたときや削除ボタンは防げない。
これをイベントマクロでさらに強化する。
(シートの保護でもできるけど、他の影響もあるのでやりたくない)

ということで、マクロはこんな感じ。

画像53

画像54

この方法だとセルの変更だけじゃなくて、範囲選択や行削除にも対応可能。

(なるほど、.Undoで戻すのか。Cancelできないもんね。)

画像55

(つよつよからの鋭いフォロー。ためになるぅぅぅ)

ここから変わり種

きぬあささん作。
Shapeを動かすときのイベントは・・・ない。
けど、特殊な方法で発動させて例。

画像56

画像57

図形の名前と座標を内部で保管し、変更があったかどうかをチェックする。m_CommandBars_OnUpdateイベントを使っているのは流石!

豆知識

Workbookの保存は、AfterとBeforeの両方のイベントがある。

画像58

本日使ったサンプルファイル


いやぁ、今日も勉強になったわぁ。
みなさんいかがでしたか?
もし勉強になったという方は、投げ銭もお願いいたしまーす。


この記事が気に入ったらサポートをしてみませんか?