こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2009-09-17 15:20:31

QNo.5297671

暇なときに回答ください

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

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

投稿日時 - 2009-09-17 15:59:08

補足

回答ありがとうございます。

出来ました!
これならページが増えても追記することなく
動作しました。

ひとずつの意味を調べながら覚えていきます。

本当にありがとうございました。

投稿日時 - 2009-09-17 20:02:20

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2009-09-17 15:53:05

ANo.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

みたいな事ですか?

投稿日時 - 2009-09-17 15:44:25

補足

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

本当にありがとうございました。

投稿日時 - 2009-09-17 19:50:18

あなたにオススメの質問