VBA(Visual Basic for Applications)を使用して、ボタンを3回押すと特定のコードを実行したい場合、動作に問題が発生することがあります。この記事では、その問題に対する修正方法と、ボタンを3回押す効率的な実装方法について解説します。
1. VBAでボタンを3回押す動作の問題
ユーザーがボタンをクリックしてコードを実行する際に、特に「設定」の部分のコードがうまく実行されない問題が発生することがあります。具体的には、F11に入力が無い場合にメッセージボックスが表示された後、ボタンを何度押しても「設定」部分のコードが実行されないという現象です。
この問題の原因としては、メッセージボックスを表示させた後に処理が正常に戻らず、静的変数「C」のカウントがリセットされないことが考えられます。
2. コードの修正方法
問題を解決するために、コードを修正する方法を紹介します。特に重要なのは、「静的変数(Static)」の取り扱いと、条件分岐の流れの改善です。
以下の修正ポイントを試してみてください。
Sub 登録()
If WorksheetFunction.CountA(Range("C21")) = 0 Then
MsgBox ("数値を入力して下さい")
Exit Sub
End If
Range("A4:O4").Select
Selection.Copy
i = Range("F1")
Range(Cells(i, 3), Cells(i, 17)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'クリックカウント
Static C As Long
C = C + 1
If C = 3 Then
'設定
If WorksheetFunction.CountA(Range("F11")) = 0 Then
MsgBox ("設定値入力してください")
C = 0
Exit Sub
End If
Range("B3:I3").Select
Selection.Copy
n = Range("B1")
Range(Cells(n, 18), Cells(n, 25)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
C = 0
End If
End Sub
この修正では、「F11」に入力がない場合でも処理がスムーズに進むようになります。
3. ボタンを3回押して「設定」コードを実行する効率的な方法
ボタンを3回押すと「設定」部分のコードが実行される仕組みは、静的変数「C」を利用したカウント制御をしています。この方法は動作的には問題ないのですが、さらに効率化するために「クリック数」によるロジックを整理することができます。
例えば、クリック数をカウントしてその数に応じて処理を分岐させる方法として、次のように「C」を使って動作を管理する方法があります。
Sub 登録()
Static C As Long
C = C + 1
If C = 3 Then
'設定処理
Call 設定処理
C = 0
End If
End Sub
Sub 設定処理()
If WorksheetFunction.CountA(Range("F11")) = 0 Then
MsgBox ("設定値入力してください")
Exit Sub
End If
Range("B3:I3").Select
Selection.Copy
n = Range("B1")
Range(Cells(n, 18), Cells(n, 25)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End Sub
この方法では、クリック数をカウントして、その回数に応じて処理を切り替えることができます。
4. 修正後のコードの確認
修正したコードをテストして、動作確認を行いましょう。修正後は、F11に入力がなくてもスムーズに処理が進み、「設定」部分のコードも確実に実行されるようになります。
まとめ
VBAでボタンを3回押すとコードを実行する仕組みは便利ですが、F11に入力が無い場合の処理で問題が発生することがあります。今回紹介した方法でコードを修正し、効率的な実装を行うことで、よりスムーズな動作を実現することができます。


コメント