【VBA】特定のセルをクリックしたらマクロを実行する方法を徹底解説

 

特定のセルをクリックしたら作成したマクロを実行したい

 

こんな要望にお応えします。

 

「特定のセルをクリックしたら実行するVBA」を扱えると、以下の問題を解決できます。

  • ボタンやユーザーフォームを使わずマクロを実行したい
  • VBAを嫌う人がいる環境でもマクロを導入したい
  • セルに直接記入する数式のような処理を実現したい

 

ボタンを押下してマクロを実行させるのがめんどう!集計結果や転記情報をすぐに表示さたい!と考えている方は是非参考にしてみてください。

 

広告

「特定のセルをクリックしたらマクロを実行する」ってどういうこと?

「特定のセルをクリックしたらマクロを実行する」とはどういうことなのかを具体的にご紹介します。

特定のセルをクリックまたは編集するだけで作成したマクロを実行できるようになるということです。

 

例えばこんな感じ

 

動画ではセルをクリックすると背景色が変化するマクロの動きをご紹介しています。

 

C2、4、5セルをクリックすると緑、D3やB3セルをクリックすると赤、C3セルをクリックすると黄色に背景色が変化する

という内容です。

 

Left Caption

ひらめく人

チェック作業が多いエクセルによく導入しています。

 

「特定のセルをクリックしたらマクロを実行する方法」は、

ボタンやユーザーフォームを使わずマクロを実行したいときにも利用されます。

 

例えばこんなとき

 

仕事をしているとボタンやユーザーフォームが邪魔くさい!という方が必ず何人かいらっしゃいますよね。

そんな方と共有しなければならないエクセルには「特定のセルをクリックしたらマクロを実行する方法」の導入がおすすめです。

 

Left Caption

ガッツポーズの人

マクロが設定されているとは気づかずに使っている方が結構います。

 

「特定のセルをクリックしたらマクロを実行する方法」を導入するには

 

「特定のセルをクリックしたらマクロを実行する方法」を導入するには、「引数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」は、長くなるコードを分けてることができるので複雑な処理が必要な場合によく利用されます。

めちゃくちゃ使い勝手が良いので自由に扱えるようにしてきましょう。

 

「特定のセルをクリックしたらマクロを実行する方法」の設定はマメBlogにお任せ

 

「特定のセルをクリックしたらマクロを実行させる方法」の解説を行ってきましたが、

やり方が全然わからない!ちょっと内容が難しくて設定できそうにない!という方もいらっしゃると思います。

 

Right Caption

困った人

正直、VBA初心者の方には少し難しいVBAかなぁと思います。

それでも、

「特定のセルをクリックしたらマクロを実行させる方法」を導入してエクセル作業の効率をアップさせたい!!

という方は是非マメBlogにご相談ください。

 

>> マメBlogへの問い合わせはこちら

 

エクセル作業の効率アップの仕組みを数多く開発してきた実績がありますので、

どのような実行マクロを設定すべきなのか、他に最善の方法の方があるのか、を検討させていただきます。

 

ボタンやユーザーフォームを採用するとマクロを実行する際いちいちボタンを押下しなければなりませんが、

「特定のセルをクリックしたらマクロを実行させる方法」を導入すればこのような手間を省略することができます。

 

Left Caption

上を目指す人

確実にエクセル業務の効率化をアップさせることが可能です。

 

ボタンを押下することくらいどうってことないよ!

と感じるかもしれませんが、毎日行うエクセル作業ではボタン押下もめんどうになってくるはずです。

 

「特定のセルをクリックしたらマクロを実行させる方法」をあらゆるエクセルファイルに導入することで、

めんどうなストレスを感じることがなくなりました。

 

Left Caption

正解の人

職場では大好評!

 

特定のセルをクリックしたらマクロを実行させる方法」をしなければ仕事にならない

と言ってくれる方もいました。

 

エクセルを使う人にマクロが設定されていると感じさせないので、大勢の人が共有して操作するエクセルへの導入がおすすめです。

 

マクロ開発に関する相談・質問は完全無料です。

費用が発生するとしたら「〇〇マクロの開発には〇〇円の費用が発生します。」としっかり打合せを行ったときのみ

まずはお気軽のご相談ください。

 

 

マクロを使ってエクセル業務の効率をアップさせましょうー