こんにちは!Lenocoです。本日も見てくださりありがとうございます。
今回はダブルクリックでセル内容を変更するマクロについて学びましょう!
ダブルクリックでセル内容を変更する
例えばExcel上で「〇」と「×」を切り替えるなど、
ON/OFFを設定したいことってないでしょうか?
これは印刷したい、これは印刷しない…などチェックを入れる時に手入力したり、プルダウンで選ぶこともできますが
それだと時間がかかってしまうかもしれません。
そんな時に便利な、ダブルクリックでON/OFFが簡単に切り替えられるマクロを作ってみましょう!
今回は、セルC3からセルC5の間で〇と×が切り替わるようにしていきます。
今回のマクロ、2か所にコードを書きます(理由はあとで説明します)。
コード(標準モジュールに書きます)
Public Function OnOffSwitching(rng As Range) As Boolean
If rng.row >= 3 And rng.row <= 5 And rng.Column = 3 Then
If Not (rng.Value = "〇") Then
rng.Value = "〇"
Else
rng.Value = "×"
End If
OnOffSwitching = True
End If
End Function
コードの説明
まずコードを書く場所ですが、VBEを開いて
VBAProjectの該当のファイル上で右クリック→挿入→標準モジュール
をクリックして出てきたモジュール上となります。
コードの説明です。
戻り値を返したいので、Functionプロシージャを使います。
また、Publicを付けることでそのプロジェクト内で他のモジュールから呼び出すことができるようになります。
戻り値はBoolean型でTrueもしくはFalseを返します。これは、呼び出し元となるシートモジュール(後述します)の
Worksheet_BeforeDoubleClickイベントのCancelパラメータに入れるために必要となります。
Falseを返すことで該当のセルが編集状態となり、Trueを返すと既定のダブルクリックの操作は実行されず、編集状態になりません。
引数のRange型の変数rngにはダブルクリックされたセルが入っています。
If文を見てみましょう。
ダブルクリックされたセルの行番号が3以上5以下だった場合、If文に入ります。
セルの文字が「〇」以外(空白も含む)だった場合、セルの文字を「〇」にします。
上記以外(セルの文字が「〇」だった)の場合、セルの文字を「×」にします。
戻り値としてTrueを返します。
戻り値はデフォルトでFalseが設定されているので、If文に入らなかった場合はそのままFalse、If文に入ったらTrueとなる仕組みです。
コード(シートモジュールに書きます)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = OnOffSwitching(Target)
End Sub
コードの説明
コードを書く場所ですが、このマクロを実行させたいシート自身です。
VBEを開き、VBAProjectで該当のシートをダブルクリックして開いたシートモジュール上となります。
シートモジュールの上部左プルダウンから「Worksheet」、上部右プルダウンから「BeforeDoubleClick」を選択すると
プロシージャの枠を作成できます。(もちろんこのままコードをコピーしてもOKです)
コードの説明です。
先ほど標準モジュールで作ったプロシージャを呼び出します。
この時引数にはダブルクリックされたセル(Target)を渡します。
そして、プロシージャの戻り値であるTrueもしくはFalseをCancelパラメータに入れます。
先ほども書きましたが、戻り値はデフォルトでFalseとなっているので、
呼び出し先のプロシージャでIf文に入らなければそのままFalseとなります。
さいごに
上記のコードは、正直シートモジュール1つでも完結するのですが、汎用性を高めるために敢えて2か所に分けてコードを書いています。
シートモジュールから標準モジュールのプロシージャを呼び出すことで、
他のシートでも同じ機能を使いたいときに同じプロシージャを呼び出すだけで済みます。
また、プロシージャで変更が生じたときも1つのプロシージャを修正するだけで済むので非常に効率が良いのです。
最初これを見たときは「おぉ!便利!」と感動しました。
ぜひ作ってみて、動きを確かめてみてください!
Lenoco