- ベストアンサー
ユーザーフォームでセルを選択
エクセルのVBAでユーザーフォームに数値を入力してセルを選択することは可能でしょうか? 例えば、列はAに固定していいのですが、ユーザーフォームに「123」と入力してボタンを押せば「A123」のセルがアクティブになるようなユーザーフォームを作成したいのですが方法がわかりません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub CommandButton1_Click() 'テキストボックスが空の時は何もしない If Me.TextBox1 = "" Then Exit Sub 'テキストボックスが数字以外だったら注意メッセージ表示でExit Sub If IsNumeric(Me.TextBox1) = False Then MsgBox "数字を入力してください", vbExclamation Exit Sub End If 'A列の指定されたセルを選択後、ユーザーフォームを閉じる Range("a" & Me.TextBox1).Select Unload Me End Sub エラーが起きないようにちょっと書き換えてみました。
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 ご希望の機能はユーザーフォームを作成しなくても、数式バーの左にある小さなボックスで可能ですが、ユーザーフォームで行う場合のサンプルです。 ご希望の動作に若干機能を追加しています。 ・A1 や E1 などセルのアドレスとして有効な文字列であれば、そこにジャンプ ・数字であれば、定数で指定した列の行へジャンプ TEXTBOXに入力されたものが数値の場合、IsNumericで数値であるチェックを行うだけではエラーが発生する可能性があります。例外処理として、Intで小数点以下を無効にしておいたり、数字の有効範囲のチェックも必要でしょう。 機能的にはシンプルですがコードが長いのは、コメントを数多く入れてあるからです。 【前提】 ユーザーフォーム内の配置コントロール ・TEXTBOX1 ・CommandButton1 【以下VBAコード 場所:ユーザーフォーム】(次行から終わりまで) Private Sub CommandButton1_Click() '列名が省略された場合に移動する列 Const cstCol = "A" Dim Sh As Worksheet Dim TargetCell As Range 'TEXTBOXコントロールの値 strParam = Me.TextBox1.Text '処理対象はアクティブシート Set Sh = ActiveSheet 'セルアドレスとして有効ならば On Error Resume Next Set TargetCell = Sh.Range(strParam) On Error GoTo 0 If Not TargetCell Is Nothing Then TargetCell.Select '数字であれば ElseIf IsNumeric(strParam) Then '小数点以下はカット RowNum = CLng(Int(strParam)) '数字で1~65536の範囲であれば Select Case RowNum Case 1 To 65536 '定数を補完してセル選択 Sh.Cells(RowNum, cstCol).Select Case Else '数字の有効範囲外であればトラップ GoTo ExitHandler End Select End If Application.Goto Reference:=ActiveCell ExitHandler: Set TargetCell = Nothing Set Sh = Nothing End Sub
お礼
早速使用させて頂きました。細かな回答ありがとうございます。
- min128mini
- ベストアンサー率34% (37/107)
Private Sub CommandButton1_Click() If Me.TextBox1 = "" Then Exit Sub Range("a" & Me.TextBox1).Select End Sub こんな感じでしょうか?
お礼
ありがとうございます、早速使用させて頂きました。これで無事問題が解決しました。