ExcelのVBAを使って、ユーザーにシート名を入力させ、間違って存在しないシート名を入力した場合に再度入力を促す方法について解説します。InputBoxでシート名を入力させるとき、存在しないシート名を入力された場合にエラーメッセージが表示されることがあります。この問題を解決するためには、シート名が存在するかどうかを確認し、無効な場合には再入力を促す仕組みを作ることが大切です。
ExcelのVBAでシート名を入力させる基本の流れ
まず、VBAのInputBoxを使ってユーザーにシート名を入力させる基本的なコードを理解しましょう。InputBoxを使用すると、シート名をユーザーから入力してもらい、その名前を元にシートをアクティブにすることができます。以下がその基本コードです。
Private Sub Workbook_Open()
Dim ws As String
ws = InputBox("名前(苗字のみ)を入力してください")
Worksheets(ws).Activate
Cells(1, 1).Activate
End Sub
このコードでは、InputBoxで名前を入力させ、その名前を使ってシートをアクティブにしています。しかし、このままだと存在しないシート名が入力された際にエラーが発生してしまいます。
存在しないシート名を入力したときに再入力を促す方法
存在しないシート名が入力された場合にエラーメッセージが表示されるのを防ぎ、再入力を促す方法は、VBAで「エラーハンドリング」を使うことです。具体的には、ユーザーが入力したシート名が存在するかどうかを確認し、存在しない場合には再度入力を促すようにします。
以下のコードは、ユーザーが正しいシート名を入力するまで繰り返し入力を求める例です。
Private Sub Workbook_Open()
Dim ws As String
Dim sheetExists As Boolean
sheetExists = False
Do While Not sheetExists
ws = InputBox("名前(苗字のみ)を入力してください")
On Error Resume Next
sheetExists = Not Worksheets(ws) Is Nothing
On Error GoTo 0
If Not sheetExists Then
MsgBox "存在しないシート名です。もう一度入力してください。"
End If
Loop
Worksheets(ws).Activate
Cells(1, 1).Activate
End Sub
このコードでは、ユーザーが存在しないシート名を入力した場合に、「存在しないシート名です」とメッセージが表示され、再度入力を求めます。
エラーハンドリングのポイント
VBAでは、エラーハンドリングを使うことで、エラーが発生してもプログラムが停止せず、指定した動作を続けることができます。上記のコードでは、On Error Resume Next
を使ってエラーを無視し、その後On Error GoTo 0
でエラーハンドリングを解除しています。
これにより、ユーザーが存在しないシート名を入力してもプログラムが中断することなく、適切に再入力を促すことができます。
まとめ
ExcelのVBAでInputBoxを使用してユーザーにシート名を入力させる場合、存在しないシート名を入力された際にエラーメッセージを表示せず、再度入力を促すためにはエラーハンドリングを使用することが重要です。上記のコード例を参考に、ユーザーに正しいシート名を入力してもらう仕組みを作ることができます。これにより、入力ミスを防ぎ、ユーザーによりスムーズな操作を提供できます。
コメント