- ベストアンサー
excel vba ジャンプ
excel2003のUserFormにてtextbox作成しました。 textbox1にページを入力すると指定のページにジャンプする コードを作成したのですが、動作的には目的とする事ができました。 ただ、初心者レベルで作成したので、コード記述が長く、 ページが増えるたびにコードを追記していかなければなりません。 下記に作成したコードを記述します。 もっと簡単に記述する方法はありますか? ---------------------------------------------------------- Private Sub TextBox1_Change() If TextBox1.Value = 1 Then ActiveWindow.ScrollRow = 1 ActiveWindow.ScrollColumn = 1 Range("$A$15").Select End If If TextBox1.Value = 2 Then ActiveWindow.ScrollRow = 38 ActiveWindow.ScrollColumn = 1 Range("$A$38").Select End If If TextBox1.Value = 3 Then ActiveWindow.ScrollRow = 69 ActiveWindow.ScrollColumn = 1 Range("$A$69").Select End If If TextBox1.Value = 4 Then ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollColumn = 1 Range("$A$100").Select End If If TextBox1.Value = 5 Then ActiveWindow.ScrollRow = 131 ActiveWindow.ScrollColumn = 1 Range("$A$131").Select End If End Sub ---------------------------------------------------------- 上記記述で行っていることは、 textbox1に 1 と入力すると1ページ目が表示 キーボードでctrl+Homeの操作をした状態でカーソルがA15選択 textbox1に 2 と入力すると2ページ目が表示 表示の先頭が38行目、カーソルがA38選択 ページの行数が1ページ目だけ37行 2ページ目以降が31行ごとです。 実際は、200ページ以上あるのでなんとかしたいのですが・・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 ごめんなさい、数字を読み違えていました。 ↓で良いはずです。 Private Sub TextBox1_Change() '数値以外入力されたら終了 If IsNumeric(TextBox1.Value) = False Then Exit Sub 'Excelの行範囲を超える場合も終了(Excel2007の場合65536→1048576に変更) If (TextBox1.Value < 1) Or (TextBox1.Value > Int((65536 - 7) / 31)) Then MsgBox "Excelの範囲を超えます" Exit Sub End If ActiveWindow.ScrollRow = 7 + 31 * (TextBox1.Value - 1) ActiveWindow.ScrollColumn = 1 Range("A" & (7 + 31 * (TextBox1.Value - 1))).Select '1の時だけ、選択セルが異なる If TextBox1.Value = 1 Then Range("A15").Select End Sub
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
こういうことでしょうか? Private Sub TextBox1_Change() '数値以外入力されたら終了 If IsNumeric(TextBox1.Value) = False Then Exit Sub 'Excelの行範囲を超える場合も終了(Excel2007の場合65536→1048576に変更) If (TextBox1.Value < 1) Or (TextBox1.Value > Int((65536 - 1) / 37)) Then MsgBox "Excelの範囲を超えます" Exit Sub End If ActiveWindow.ScrollRow = 1 + 37 * (TextBox1.Value - 1) ActiveWindow.ScrollColumn = 1 Range("A" & (1 + 37 * (TextBox1.Value - 1))).Select '1の時だけ、選択セルが異なる If TextBox1.Value = 1 Then Range("A15").Select End Sub
- n-jun
- ベストアンサー率33% (959/2873)
Private Sub TextBox1_Change() Select Case TextBox1.Value Case 1 Application.Goto Range("A15"), True Case 2 Application.Goto Range("A38"), True Case 3 Application.Goto Range("A69"), True Case 4 Application.Goto Range("A100"), True Case 5 Application.Goto Range("A131"), True Case Else End Select End Sub みたいな事ですか?
補足
回答ありがとうございました。 動作的にはそうです。 この方法だと簡単に記述できて良いです。 この記述方法、覚えておきます。 しかし、ページが増えるとやはり追記して いかなくてはならないのですよね? 本当にありがとうございました。
補足
回答ありがとうございます。 出来ました! これならページが増えても追記することなく 動作しました。 ひとずつの意味を調べながら覚えていきます。 本当にありがとうございました。