VBAの引数Targetの使い方【 セルのクリックでVBAを動作させる方法 】

豆父ちゃん
こんな疑問にお応えします。
結論から言うと、引数Targetを使ってVBAを作る!です。
VBAの実行方法でよく使われるのが、ユーザーフォームによる実行やボタンによる実行です。これらの表示が邪魔くさい!と言う方に引数TargetによるセルをクリックしてVBAを実行させる方法はとてもおすすめです。
セルをクリックして実行させる方法はいろんなことに応用することができます。私の職場では引数Targetが使われたVBAを数多く導入しています。
・色を変化させ、チェック作業に応用
・内容が変化するプルダウンリストを作成
・注意喚起ボタンを使って忘れ防止VBAの作成
この記事では実際に仕事で使われているVBAを参考に引数Targetの使い方を紹介します。
目次
引数Targetとは
WorkSheet_Changeイベントの引数Targetは、セルの範囲を指定したり、セルをクリックしたときにVBAを実行する処理を行うときに使われます。
この記事ではセルをクリックしたときにVBAを実行させる!という引数Targetの使い方を紹介します。
動画では、この記事内で紹介している3つのサンプルVBAについて紹介しています。
引数Targetの使い方の特徴として、WorkSheet_Changeイベントはプロシージャではなく、Sheetに作成する!ということです。
よく標準モジュールで引数ターゲットを使おうとしてうまくいかないという方がいます。まずはじめに、引数ターゲットはSheetにVBAをつくる!ということを覚えておいてください。
下記の記事では、引数Targetについてもっと詳しく知りたい!という方におすすめの参考書を紹介しています。Worhsheet Changeイベントとは?Private Subとは?という疑問を解決することができます。
引数Targetと関数Ifの組み合わせ
引数Targetは関数IFと組み合わせることで、とても便利に使うことができます。
サンプル内容
セルをクリックするとセル内のテキストがどんどん変化する
「空欄」 → 「〇」 → 「×」 → 「△」 → 「空欄」
上記のような変化をするサンプルVBAを紹介します。
サンプルVBA
1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
2 | On Error Resume Next |
3 | If Target.Value = “" Then |
4 | Target.Value = “〇" |
5 | ElseIf Target.Value = “〇" Then |
6 | Target.Value = “×" |
7 | ElseIf Target.Value = “×" Then |
8 | Target.Value = “△" |
9 | ElseIf Target.Value = “△" Then |
10 | Target.Cells.ClearContents |
11 | Else |
12 | End If |
13 | If Err <> 0 Then |
14 | Err.Clear |
15 | End If |
16 | End Sub |
実行結果
セルをクリックするだけで○を表示、非表示にすることができました。私はこのVBAをチェック表などによく利用しています。
引数Targetとプルダウンリストの組み合わせ
VBAでプルダウンリストを設定したいときにTargetを使ったVBAの実行は必ず必要になります。
サンプル内容
セルをクリックするとプルダウンリストが表示する
サンプルVBA
1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
2 | ActiveSheet.Cells.Validation.Delete |
3 | With Target.Validation |
4 | .Add Type:=xlValidateList, Formula1:="〇,×" |
5 | .ShowError = False |
6 | End With |
7 | If Err <> 0 Then |
8 | Err.Clear |
9 | End If |
10 | End Sub |
実行結果
セルをクリックすると、リストにはプログラムに直接入力した「〇」と「×」が表示されています。
ほかにも別シートの一覧表からプルダウンリストの内容を取得して表示させる!ということも可能です。この方法は下記の記事で詳しく紹介しています。
このVBAはエクセル家計簿でも使われています。いろんなことに応用できる技術なのでチェックしてみてください。
引数Targetでセルを指定
TargetとRow(行の指定)、TargetとCloumn(列の指定)を組み合わせることで、実行させるセルをピンポイントで指定することができます。これを確かめるため、3つのパターンのサンプルを紹介します。
引数字Targetでセルを指定するサンプル①
サンプル内容①
C列のセルをクリックすると、背景色を緑にする
サンプルVBA①
1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
2 | On Error Resume Next |
3 | If Target.Column = 3 Then |
4 | Target.Cells.Interior.Color = RGB(0, 255, 0) |
5 | Else |
6 | End If |
7 | If Err <> 0 Then |
8 | Err.Clear |
9 | End If |
10 | End Sub |
実行結果①
引数字Targetでセルを指定するサンプル②
サンプル内容②
3行目のセルをクリックすると、背景色を赤にする
サンプルVBA②
1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
2 | On Error Resume Next |
3 | If Target.Row = 3 Then |
4 | Target.Cells.Interior.Color = RGB(255, 0, 0) |
5 | Else |
6 | End If |
7 | If Err <> 0 Then |
8 | Err.Clear |
9 | End If |
10 | End Sub |
実行結果②
引数字Targetでセルを指定するサンプル③
サンプル内容③
C3セルをクリックすると、背景色を黄色にする
サンプルVBA③
1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
2 | On Error Resume Next |
3 | If (Target.Column = 3) And (Target.Row = 3) Then |
4 | Target.Cells.Interior.Color = RGB(255, 255, 0) |
5 | Else |
6 | End If |
7 | If Err <> 0 Then |
8 | Err.Clear |
9 | End If |
10 | End Sub |
実行結果③
上図のように、指定したセルをクリックすると色が塗りつぶされるVBAをつくることができました。
引数Targetを使ったVBAの注意事項
仕事で引数Targetを作ったVBAを導入するとき、ほとんどが行や列を指定しますが、行や列の挿入・削除をされると指定していたセルがズレてしまう恐れがあります。
そのため複数の人が扱うエクセルには行や列を変化させない工夫が必要になります。「シートの保護」を使って行や列を簡単に編集できないようにするのがおすすめです。
多くの方が扱うエクセルファイルに引数Targetを使ったVBAを導入するときはいろんなことを想定しましょう。
引数Targetを使った事例の紹介
この記事の内容で、「引数TargetはセルをクリックしてVBAを実行させるもの」とお判りいただけたかと思います。ではどのように引数Targetが使えるのか!ということをサンプルを使って紹介していきます。
プルダウンリストの内容が変化するエクセル家計簿
セルをクリックすると設定シートに作成された一覧表のデータを元にプルダウンリストが表示されるエクセル家計簿を作成しました。ただ一覧表の情報をリストに表示させるだけではなく、クリックしたセルの左のセルの情報でリスト内容が変化するというVBAが設定されています。このVBAは引数Targetが使用されていて、プルダウンリストが格段に扱いやすくなります。
このエクセル家計簿には他にも、グラフを作成するVBA、自動集計するVBAなど家計簿に最適なVBAがいくつも設定されています。エクセル家計簿については下記のサイトで詳細・ダウンロードが可能です。気になる方は各サイトをチェックしてみてください。
ユーザーフォームが表示されるエクセルカレンダー
セルをクリックすることで年数切替を行うユーザーフォームが表示されるVBAが設定されたエクセルカレンダーを作成しました。好きな年数に簡単に切り替えられて、曜日や背景色が自動で調整されるのでとても使いやすいと好評のエクセルカレンダーです。「年数切替は頻繁に行うものではないから普段は隠してほしい」という依頼から、セルをクリックするとユーザーフォームが表示させる仕組みに設定を行いました。
エクセルカレンダーには他にも、年数と日付から曜日を自動調整するVBA、年間カレンダーと月間カレンダーの内容を同期するVBA、スクロールを省略できるハイパーリンクVBAが設定されています。
エクセルカレンダーについては下記のサイトで詳細・ダウンロードが可能です。気になる方は各サイトをチェックしてみてください。
これからVBAを勉強をはじめるには
引数Targetのように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。
VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。
【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。
- 基礎からプログラミングを勉強したい
- まとまった勉強時間の確保が難しい
- 途中で挫折したくない
上記のように考えている方に【1st Step】はおすすめです。
下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。
これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません