イベントプロシージャを作ってみる

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

イベントプロシージャーの作り方、具体的にイベントプロシージャーのマクロがどのような流れで実行されるかについてを解説します。セルの値が変更れたときに実行されるプロシージャでは、引数 Target が何を指すのか?を正しく理解することがポイントです。

この教材についての過去の質問・感想

12235 : 小川慶一の回答 (2020-06-30 11:44:15)

受講生 さん:

こんにちは。

> また基礎編フォロアップベーシックをやってみて、苗字の取得がうまくできました。Instr関数を使ってうまくいきました。
> ありがとうございました。

本件、当初の課題は解決したということですね。
よかったです。

基礎編ベーシックの演習しっかりやると、解決能力高まりますよ。
ひきつづき、お楽しみください☆


12226 : 受講生さんのコメント (2020-06-28 16:32:55)

小川慶一さん:

お返事遅くなり申し訳ございません。
Find関数がマクロでは使用できないとのことを理解しました。
また基礎編フォロアップベーシックをやってみて、苗字の取得がうまくできました。Instr関数を使ってうまくいきました。
ありがとうございました。

なお基礎編フォロアップベーシックは何故か途中で学びをスキップしていたようで、今回初心に戻り最初から取り組みました。ご指摘の通り、自身の基礎的なスキルが足りていないことを自覚しました。これから毎日、型を覚えてしまうくらい何度も繰り返し問題を解いて、力をつけたいと思います。
また、不明点があれば質問させてください。
ありがとうございました。


> 受講生 さん:
>
> こんばんは。
>
> > イベント機能時はFind関数は使用できないでしょうか?
>
> Find関数はエクセルのワークシート関数です。マクロにはありません。ということで、イベント機能時か如何に関わらず使えません。
> ではどうするか?Replace関数を使います。
>
> それから、同一名称のプロシージャはひとつのモジュール内にひとつしか作れません。
> ということで、ひとつのプロシージャを作り、その中で条件分岐を書くことになります。
> たとえば以下のような感じですね。
> (条件式はもっとうまい書き方があるはずですが、いただいた情報からは最適解が分からないのでとりあえず書いてみたという感じです)
>
>

Private Sub Worksheet_Change(ByVal Target As Range)
>     If Intersect(Target, Range("A1")) Is Nothing Then
>         Exit Sub
>     End Sub
> 
>     Dim shName As String
>     If [[苗字が二文字のとき]] Then
>        shName = ... '苗字が2文字のときの処理
>     Else
>        shName = ... '苗字が2文字でないときの処理
>     End If
>     ActiveSheet.Name = shName
> End Sub

>
> なお、いただいたマクロについてもう少しコメントすると、セルの値を取得するのに .Value が抜けていたり、 Find(...) 内の第一引数が "  " (半角スペース、全角スペースで、長さ2の文字列)だったり、ツッコミどころが多いです。
> これらなどから察するに基礎編レベルの演習が不足していますので、基礎編フォロアップベーシックの演習をしっかりやってください。最低でも3周はやっていただきたいところです。
>


12212 : 小川慶一の回答 (2020-06-17 19:18:05)

受講生 さん:

こんばんは。

> イベント機能時はFind関数は使用できないでしょうか?

Find関数はエクセルのワークシート関数です。マクロにはありません。ということで、イベント機能時か如何に関わらず使えません。
ではどうするか?Replace関数を使います。

それから、同一名称のプロシージャはひとつのモジュール内にひとつしか作れません。
ということで、ひとつのプロシージャを作り、その中で条件分岐を書くことになります。
たとえば以下のような感じですね。
(条件式はもっとうまい書き方があるはずですが、いただいた情報からは最適解が分からないのでとりあえず書いてみたという感じです)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A1")) Is Nothing Then
        Exit Sub
    End Sub

    Dim shName As String
    If [[苗字が二文字のとき]] Then
       shName = ... '苗字が2文字のときの処理
    Else
       shName = ... '苗字が2文字でないときの処理
    End If
    ActiveSheet.Name = shName
End Sub


なお、いただいたマクロについてもう少しコメントすると、セルの値を取得するのに .Value が抜けていたり、 Find(...) 内の第一引数が "  " (半角スペース、全角スペースで、長さ2の文字列)だったり、ツッコミどころが多いです。
これらなどから察するに基礎編レベルの演習が不足していますので、基礎編フォロアップベーシックの演習をしっかりやってください。最低でも3周はやっていただきたいところです。


12211 : 受講生さんのコメント (2020-06-17 16:13:09)

お世話になります。
動画では取り扱われていなかった内容で恐縮ですが、例えばエクセルシートのA1セルに氏名が表示されたら、イベント機能でシート名が苗字に変更されるコードを書きたいのですが、うまくいきません。

Left関数で左から2桁を取ってくるコードはうまく動きましたが、苗字が3文字あるいは1文字の方についてもうまく表示されるよう、Find関数を使って、空欄の前まで取ってくるコードを取り入れたのですが、(通常の関数ではうまくいくのですが)エラーで止まってしまいます。
イベント機能時はFind関数は使用できないでしょうか?

エラー表示:コンパイルエラー、subまたはfunctionが定義されていません。
(苗字2文字設定)正常に動きます
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range("A1"), 2)
End Sub


(苗字3文字・1文字対応)正常に動きません
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range("A1"), Find("  ", Range("A1")) - 1)
End Sub


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 エクセルマクロ・VBA「イベントとフォーム」講座の概要
    【動画1】 エクセルマクロ・VBA「イベントとフォーム」講座の概要 未習得
  2. 【動画2】 イベント実行の流れ
    【動画2】 イベント実行の流れ 未習得
  3. 【動画3】 イベントの概要
    【動画3】 イベントの概要 未習得
  4. 【動画4】 イベントの概要その2
    【動画4】 イベントの概要その2 未習得
  5. 【動画5】 イベントプロシージャを作ってみる
    【動画5】 イベントプロシージャを作ってみる 未習得
  6. 【動画6】 イベントプロシージャ・オブジェクトボックス・プロシージャボックス
    【動画6】 イベントプロシージャ・オブジェクトボックス・プロシージャボックス 未習得
  7. 【動画7】 CountプロパティとExit Sub
    【動画7】 CountプロパティとExit Sub 未習得
  8. 【動画8】 イベントの生じたセルの行番号によって処理を切り分ける
    【動画8】 イベントの生じたセルの行番号によって処理を切り分ける 未習得
  9. 【動画9】 イベントプロシージャ実行と作成の流れまとめ
    【動画9】 イベントプロシージャ実行と作成の流れまとめ 未習得
  10. 【動画10】 イベントの連鎖
    【動画10】 イベントの連鎖 未習得
  11. 【動画11】 イベントの連鎖(フラグで制御する方法)
    【動画11】 イベントの連鎖(フラグで制御する方法) 未習得
  12. 【動画12】 Workbookのイベント
    【動画12】 Workbookのイベント 未習得
  13. 【動画13】 Workbook_Openイベント
    【動画13】 Workbook_Openイベント 未習得
  14. 【動画14】 Workbook_Activateイベント・Workbook_Deactiveイベント
    【動画14】 Workbook_Activateイベント・Workbook_Deactiveイベント 未習得
  15. 【動画15】 Workbook_Beforeイベント
    【動画15】 Workbook_Beforeイベント 未習得
  16. 【動画16】 Workbook_BeforeCloseイベント その1
    【動画16】 Workbook_BeforeCloseイベント その1 未習得
  17. 【動画17】 Workbook_BeforeCloseイベント その2
    【動画17】 Workbook_BeforeCloseイベント その2 未習得
  18. 【動画18】 Workbook_BeforePrintイベント
    【動画18】 Workbook_BeforePrintイベント 未習得
  19. 【動画19】 Workbook_BeforeSaveイベント
    【動画19】 Workbook_BeforeSaveイベント 未習得
  20. 【動画20】 Worksheetイベントの概要
    【動画20】 Worksheetイベントの概要 未習得
  21. 【動画21】 Worksheet_Activate・Worksheet_Deactivateイベント
    【動画21】 Worksheet_Activate・Worksheet_Deactivateイベント 未習得
  22. 【動画22】 Worksheet_Changeイベントの概要
    【動画22】 Worksheet_Changeイベントの概要 未習得
  23. 【動画23】 Worksheet_Changeイベントのサンプル その1
    【動画23】 Worksheet_Changeイベントのサンプル その1 未習得
  24. 【動画24】 Worksheet_Changeイベントのサンプル その2
    【動画24】 Worksheet_Changeイベントのサンプル その2 未習得
  25. 【動画25】 複数セルを同時に編集する際の注意点
    【動画25】 複数セルを同時に編集する際の注意点 未習得
  26. 【動画26】 Worksheet_Changeイベントの連鎖
    【動画26】 Worksheet_Changeイベントの連鎖 未習得
  27. 【動画27】 Worksheet_Changeイベントの連鎖を避ける方法
    【動画27】 Worksheet_Changeイベントの連鎖を避ける方法 未習得
  28. 【動画28】 UserFormの概要
    【動画28】 UserFormの概要 未習得
  29. 【動画29】 UserFormを使ったアプリケーションのデモ
    【動画29】 UserFormを使ったアプリケーションのデモ 未習得
  30. 【動画30】 フォームとコントロール作成時に最初に気をつけること
    【動画30】 フォームとコントロール作成時に最初に気をつけること 未習得
  31. 【動画31】 UserFormの解説 その1
    【動画31】 UserFormの解説 その1 未習得
  32. 【動画32】 UserFormの解説 その2
    【動画32】 UserFormの解説 その2 未習得
  33. 【動画33】 UserForm上のコントロールを学ぶにあたって
    【動画33】 UserForm上のコントロールを学ぶにあたって 未習得
  34. 【動画34】 基本中の基本のプロパティ
    【動画34】 基本中の基本のプロパティ 未習得
  35. 【動画35】 見た目に関わるプロパティ
    【動画35】 見た目に関わるプロパティ 未習得
  36. 【動画36】 ユーザビリティに関わるプロパティ
    【動画36】 ユーザビリティに関わるプロパティ 未習得
  37. 【動画37】 スクロールバーに関わるプロパティ
    【動画37】 スクロールバーに関わるプロパティ 未習得
  38. 【動画38】 コントロールのメソッドについて
    【動画38】 コントロールのメソッドについて 未習得
  39. 【動画39】 コマンドボタン、ラベル、テキストエリアに固有のプロパティ
    【動画39】 コマンドボタン、ラベル、テキストエリアに固有のプロパティ 未習得
  40. 【動画40】 オプションボタン、チェックボックス、フレーム、マルチページ
    【動画40】 オプションボタン、チェックボックス、フレーム、マルチページ 未習得
  41. 【動画41】 コンボボックスとリストボックス
    【動画41】 コンボボックスとリストボックス 未習得
  42. 【動画42】 スクロールバーとスピンボタン
    【動画42】 スクロールバーとスピンボタン 未習得
  43. 【動画43】 UserFormの総括 その1
    【動画43】 UserFormの総括 その1 未習得
  44. 【動画44】 UserFormの総括 その2
    【動画44】 UserFormの総括 その2 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ