検索

キーワード


目次

【Excel VBA】セル内の値が変更された時点で、プログラムを実行する方法

  • 公開日:2023-06-20 23:53:09
  • 最終更新日:2023-06-19 13:34:12

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

皆さんこんにちは、エンジニアのIMMRです。


VBAのプログラムって、普通のプログラムのように全て値等のデータをセットして、それから

プログラムを実行して、出力を得る。というものだけでないんです。

「セルの値を変更」したり、「新しいシートを作成」したり、「右クリック」をしたり、と一定の動作を実施したことで

プログラムを実行させることができるんです。

それが「イベントプロシージャー」です。その方法について説明します。


先ほども説明しましたが、「イベントプロシージャー」は、さまざまな動作において起こるイベントです。

ここでは、その中の1つである「セル内の値が変更された時点」でプログラムが動作する方法を説明します。


サンプルのブックとしては、下記を使用して、

B列に値が入るごとにC列に結果を表示させるようにします。


80点以上なら・・・青文字で”合格”と表示

それ以外格なら・・・赤文字で”不合格”と表示

することにします。


図1 サンプルブック

図1 サンプルブック


1.イベントプロシージャーの設定方法

イベントプロシージャーは、普通のプログラムを作成する時とは、違う方法で行います。

その方法をまず、説明します。


①「Visual Basic」をクリックします。

図2 設定方法1

図2 設定方法1

↓

②「ThisWorkbook」をダブルクリックします。 ※モジュールを作成するわけではありません。

図3 設定方法2

図3 設定方法2

↓

③赤枠部分のv(矢印)部分をクリックします。

図4 設定方法3

図4 設定方法3

↓

④「Workbook」をクリックします。

図5 設定方法4

図5 設定方法4

↓

⑤赤枠部分のv(矢印)部分をクリックします。

図6 設定方法5

図6 設定方法5

↓

⑥イベントで動作するためのリストが出てきます。ここで内容を選択します。

図7 設定方法6

図7 設定方法6

↓

⑦今回は「SheetChange」を選択します。

図8 設定方法7図8 設定方法7

↓

⑧赤枠のところが、セルの値が変化した度に実行されるところです。

図9 設定方法8

 図9 設定方法8


赤枠のところに今回の処理を行うためのプログラムを記載していきます。


2.サンプルプログラムの設定

先ほどの手順でイベントプロシージャーを作成すると

「Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)」

が作成されます。


そして、「Sh」や「Target」を使ってどこのセルが変更されたかを確認することができます。

例えば、

シート名を確認したい場合 Sh.Name  ※シート「テスト」で実施した場合、「テスト」が格納されます

変更したセルのアドレス Target.Address ※セル(B4)で実施した場合「$B$4」が格納されます。

変更したセルの行 Target.Row ※セル(B4)で実施した場合「4」が格納されます。

変更したセルの列 Target.Column ※セル(B4)で実施した場合「2」が格納されます。


以上のことより下記のサンプルプログラムを作成しました。


サンプルプログラム

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Cells(Target.Row, 2) > 80 Then
        Cells(Target.Row, 3) = "合格"
        Cells(Target.Row, 3).Font.Color = RGB(0, 0, 255)
    Else
         Cells(Target.Row, 3) = "不合格"
         Cells(Target.Row, 3).Font.Color = RGB(255, 0, 0)
    End If

End Sub


これは、値が設定された(セル)の左から2つ目の列(B列)の値が

80より大きい場合「合格」という文字を3つ目の列(C列)にセットしてフォントの色を青にする。

それ以外(80以下)の場合「不合格」という文字を3つ目の列(C列)にセットしてフォントの色を赤にする。

といったプログラムです。


3.サンプルプログラムの実行

では、プログラムを実行していきます。

実行とは言っても、いままでのようにプログラム自信を実行させるのではなく、

イベントの内容に沿った作業を実行します。(ここでは、セルの値変更)


図10のようにセル(B4)に「90」という値を入力します。
そして、Enterキーを押して決定します。

図10 プログラム実行前1

図10 プログラム実行前1

↓

すると、プログラムを実行してないのにも関わらず、

図11のようにセル(C4)に青文字で”合格”と表示されます。


図11 プログラム実行後1

図11 プログラム実行後1


続いて、図12のようにセル(B5)に「70」という数値を入力して、

同じようにEnterキーを押して決定します。


図12 プログラム実行前2

図12 プログラム実行前2

↓

すると、同様に自動で図13のようにセル(C5)に赤文字で”不合格”と表示されます。


図13 プログラム実行後2

図13 プログラム実行後2


これで予定どおり、数値を入力してメッセージを表示することができました。
・80点以上なら・・・青文字で”合格”と表示
・それ以外格なら・・・赤文字で”不合格”と表示

で問題なく、出来ているように見えます。

しかし、いくつか不具合な点(バグ)が含まれているのです。

その1つを説明します。


4.サンプルプログラムの不具合な点について

不具合な点の1つがセルの範囲です。

例えば、図14のように
全く関係のない場所(セルのF6)に値を入れて同じようにEnterキーを押して決定します。


図14 プログラム実行前3

図14 プログラム実行前3

↓

図15のようにC列の箇所に”不合格”をいう文字が表示されてしまいました。


図15 プログラム実行後3

図15 プログラム実行後3

これは、セル(F6)に値を入力した時点で

セルの値を変更したのでプログラムが動いてしまい、

何も入力していないセル(B6)の値をみて、ブランク(値が何もない)すなわち、80以下と

判断して、”不合格”という文字が表示されてしまったからです。


今回の場合、B列のセルに値を入力された場合のみ、プログラムを実行するという条件を追加する必要があります。


5.サンプルプログラムの不具合修正

以下のサンプルプログラム2のように

B列の場合のみ、プログラムを実行するという設定が必要になります。


考え方はIF文を使って、値が変更された左から2つ目のセルだけを対象にします。

これにより、どのセルの値変更を行ってもプログラムは動作するが

左から2つ目、つまりB列でなければ以降の作業は行われなくなります。


サンプルプログラム2

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If (Target.Column = 2) Then                       ・・・追加箇所
    If Cells(Target.Row, 2) > 80 Then
        Cells(Target.Row, 3) = "合格"
        Cells(Target.Row, 3).Font.Color = RGB(0, 0, 255)
    Else
         Cells(Target.Row, 3) = "不合格"
         Cells(Target.Row, 3).Font.Color = RGB(255, 0, 0)        
    End If
End If                                  ・・・追加箇所 

End Sub


6.サンプルプログラムの不具合修正の実行

先ほどと同様に関係のないセルに値を入れて行ってみます。

セル(F6)に値を入力して、

同じようにEnterキーを押して決定します。


図16 プログラム実行前4

図16 プログラム実行後4

↓

図17を確認すると今度は、B列以外のセルに値を入力してもC列にメッセージは表示されません。

無事に不具合部分を改修することができました。


図17 プログラム実行後4

図17 プログラム実行後4

このようにして、不具合部分の修正は完了です。

まだ、上記プログラムには修正しないといけない部分(バグ)がありますが

今回の説明はこれで終了とさせていただきます。


セル内の値が変更された時点で、プログラムを実行することが出来ました。


【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事