• ベストアンサー

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ページ以上あるのでなんとかしたいのですが・・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.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

sucoty
質問者

補足

回答ありがとうございます。 出来ました! これならページが増えても追記することなく 動作しました。 ひとずつの意味を調べながら覚えていきます。 本当にありがとうございました。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答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 - 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)
回答No.1

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 みたいな事ですか?

sucoty
質問者

補足

回答ありがとうございました。 動作的にはそうです。 この方法だと簡単に記述できて良いです。 この記述方法、覚えておきます。 しかし、ページが増えるとやはり追記して いかなくてはならないのですよね? 本当にありがとうございました。