【VBA】特定のセルをクリックしたらマクロを実行する方法を徹底解説
特定のセルをクリックしたら作成したマクロを実行したい
こんな要望にお応えします。
「特定のセルをクリックしたら実行するVBA」を扱えると、以下の問題を解決できます。
- ボタンやユーザーフォームを使わずマクロを実行したい
- VBAを嫌う人がいる環境でもマクロを導入したい
- セルに直接記入する数式のような処理を実現したい
ボタンを押下してマクロを実行させるのがめんどう!集計結果や転記情報をすぐに表示さたい!と考えている方は是非参考にしてみてください。
目次
「特定のセルをクリックしたらマクロを実行する」ってどういうこと?
「特定のセルをクリックしたらマクロを実行する」とはどういうことなのかを具体的にご紹介します。
特定のセルをクリックまたは編集するだけで作成したマクロを実行できるようになるということです。
例えばこんな感じ
動画ではセルをクリックすると背景色が変化するマクロの動きをご紹介しています。
C2、4、5セルをクリックすると緑、D3やB3セルをクリックすると赤、C3セルをクリックすると黄色に背景色が変化する
という内容です。

ひらめく人
「特定のセルをクリックしたらマクロを実行する方法」は、
ボタンやユーザーフォームを使わずマクロを実行したいときにも利用されます。
例えばこんなとき
仕事をしているとボタンやユーザーフォームが邪魔くさい!という方が必ず何人かいらっしゃいますよね。
そんな方と共有しなければならないエクセルには「特定のセルをクリックしたらマクロを実行する方法」の導入がおすすめです。

ガッツポーズの人
「特定のセルをクリックしたらマクロを実行する方法」を導入するには
「特定のセルをクリックしたらマクロを実行する方法」を導入するには、「引数Targetを使用すること」と「コードはSheetに記載すること」2つのポイントに注意してください。
コツを掴めば簡単に設定できるようになるので、是非導入方法をマスターしてください。
引数Targetの使い方
VBAでセルを指定するにはRangeやCellsプロパティを利用するのが一般的ですが、
「特定のセルをクリックしたらマクロを実行する方法」の場合、引数Targetでセルを指定します。
注意点としては、
セル番地を数字で指定するのではなくRow(行)とColumn(列)を使ってセルを指定する
と言うこと。
例えばこんな感じ
C3セルのみを指定する場合・・・(Target.Column = 3) And (Target.Row = 3)
C列3行目の全てにセルを指定したい場合・・・(Target.Column = 3) Or (Target.Row = 3)
となります。
慣れれば簡単にセルを指定できるようになるのでいろんなマクロに「特定のセルをクリックしたらマクロを実行する方法」を導入してみてください。
下記の記事では、引数Targetの使い方が詳しく解説されているのでチェックしてみてください。
コードはSheetに記載する
「特定のセルをクリックしたらマクロを実行する方法」のコードは標準モジュールではなくSheetに記載していきます。
標準モジュールに「特定のセルをクリックしたらマクロを実行する方法」のコードを記載しても正常に動作しないので注意が必要です。
「特定のセルをクリックしたらマクロを実行する方法」のサンプル事例
特定のセルをクリックしたらマクロを実行する方法をいくつかのサンプルマクロを使ってご紹介していきます。
コピペしてそのまま使えるコードが多数掲載されているので是非参考にしてみてください。
C3セルをクリックすると背景色が黄色になる
引数TargetとRow(行の指定)、Cloumn(列の指定)を組み合わせることで、指定するセルをクリックするとマクロを実行させることが可能になります。
C3セルをクリックすると背景色を黄色に変化させるマクロがこちら
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If (Target.Column = 3) And (Target.Row = 3) Then
Target.Cells.Interior.Color = RGB(255, 255, 0)
Else
End If
If Err <> 0 Then
Err.Clear
End If
End Sub
実行結果はこち定したセルをクリックすると色が塗りつぶされるマクロをつくることができました。
セルをクリックして実行させる方法はいろんなことに応用することができます。
特定のセルを変更したときにだけマクロを実行させる
引数TargetとRangeプロパティを組み合わせることで指定するセルをクリックするとマクロを実行させることが可能になりますが、
無限に処理が動作してしまう可能性があるので注意が必要になります。
これを解決するには、セルの内容が変化しなければ処理を終了するというコードの設定が必要です。
セルの内容が変化しなければ処理を終了するコードはこちら
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Cells(6, 2), Cells(8, 8))) Is Nothing Then
Exit Sub
Else
Call 〇〇
End If
End Sub
コードの内容は、
もしB6セルからH8セルの内容が変化しなかった場合処理を終了する。セルに変化があった場合、〇〇マクロを実行する
というものです。
もっと具体的なイメージができるよう実際の仕事で使用していた様式とコードをご紹介します。
エクセルの様式はこちら
Sheetに設定したセルの内容が変化しなければ処理を終了するコードがこちら
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Cells(6, 2), Cells(8, 38))) Is Nothing Then
Exit Sub
Else
Call 転記
Call リスト転記
End If
End Sub
Module1に設定した転記マクロがこちら
Sub 転記()
On Error Resume Next
If Cells(6, 6) <> "" Then
Cells(13, 2) = Cells(6, 6)
ElseIf Cells(6, 6) = "" Then
Range(Cells(13, 2), Cells(13, 36)).ClearContents
Else
End If
If Cells(6, 14) <> "" Then
Cells(15, 2) = Cells(6, 14)
ElseIf Cells(6, 14) = "" Then
Range(Cells(15, 2), Cells(15, 36)).ClearContents
Else
End If
If Cells(6, 22) <> "" Then
Cells(17, 2) = Cells(6, 22)
ElseIf Cells(6, 22) = "" Then
Range(Cells(17, 2), Cells(17, 36)).ClearContents
Else
End If
If Cells(6, 30) <> "" Then
Cells(19, 2) = Cells(6, 30)
ElseIf Cells(6, 30) = "" Then
Range(Cells(19, 2), Cells(19, 36)).ClearContents
Else
End If
If Cells(6, 38) <> "" Then
Cells(21, 2) = Cells(6, 38)
ElseIf Cells(6, 38) = "" Then
Range(Cells(21, 2), Cells(21, 36)).ClearContents
Else
End If
If Cells(8, 6) <> "" Then
Cells(23, 2) = Cells(8, 6)
ElseIf Cells(8, 6) = "" Then
Range(Cells(23, 2), Cells(23, 36)).ClearContents
Else
End If
If Cells(8, 14) <> "" Then
Cells(25, 2) = Cells(8, 14)
ElseIf Cells(8, 14) = "" Then
Range(Cells(25, 2), Cells(25, 36)).ClearContents
Else
End If
If Cells(8, 22) <> "" Then
Cells(27, 2) = Cells(8, 22)
ElseIf Cells(8, 22) = "" Then
Range(Cells(27, 2), Cells(27, 36)).ClearContents
Else
End If
If Cells(8, 30) <> "" Then
Cells(29, 2) = Cells(8, 30)
ElseIf Cells(8, 30) = "" Then
Range(Cells(29, 2), Cells(29, 36)).ClearContents
Else
End If
End Sub
Module1に設定したリスト転記マクロがこちら
Sub リスト転記()
Dim Ash As Worksheet
Set Ash = ThisWorkbook.Worksheets("再検")
Dim Csh As Worksheet
Set Csh = ThisWorkbook.Worksheets("設定リスト")
gyoa = Ash.Cells(Rows.Count, 2).End(xlUp).Row
gyoc = Csh.Cells(Rows.Count, 3).End(xlUp).Row
For i = 13 To gyoa Step 2
For j = 3 To gyoc
If Ash.Cells(i, 2) = Csh.Cells(j, 3) Then
Ash.Cells(i, 7) = Csh.Cells(j, 4)
Ash.Cells(i, 12) = Csh.Cells(j, 5)
Ash.Cells(i, 17) = Csh.Cells(j, 6)
Ash.Cells(i, 22) = Csh.Cells(j, 7)
Ash.Cells(i, 27) = Csh.Cells(j, 8)
Ash.Cells(i, 32) = Csh.Cells(j, 9)
Else
End If
Next
Next
End Sub
指定したセルの内容が変化するとModule1に設定した「転記マクロ」と「リスト転記マクロ」を呼び出し実行する
という内容です。
マクロを呼び出す「Call」は、長くなるコードを分けてることができるので複雑な処理が必要な場合によく利用されます。
めちゃくちゃ使い勝手が良いので自由に扱えるようにしてきましょう。
VBA初心者が効率化マクロを導入する方法
VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!
このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。
マクロの開発を外注に依頼する
マクロの開発を外注に依頼する導入方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。
たとえば、
A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、
『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。
実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

ガッツポーズの人
『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、
VBA初心者でもマクロを導入できる、費用が安い、
というメリットがあります。
しかし
VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい処理を実現するコードを書くだけ
です。
【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません