Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3638 / 13644 ツリー ←次へ | 前へ→

【60982】ページを指定して移動するには? chicyu 09/3/31(火) 8:07 発言[未読]
【60983】Re:ページを指定して移動するには? 超初心者 09/3/31(火) 8:42 発言[未読]
【60984】Re:ページを指定して移動するには? chicyu 09/3/31(火) 9:46 発言[未読]
【60985】Re:ページを指定して移動するには? つん 09/3/31(火) 10:23 発言[未読]
【60986】Re:ページを指定して移動するには? chicyu 09/3/31(火) 11:47 発言[未読]
【60988】Re:ページを指定して移動するには? つん 09/3/31(火) 13:06 発言[未読]
【60989】Findメソッドの引数の注意事項? つん 09/3/31(火) 14:09 発言[未読]
【60992】Re:ページを指定して移動するには? chicyu 09/4/1(水) 6:36 発言[未読]
【60994】Re:ページを指定して移動するには? つん 09/4/1(水) 6:46 発言[未読]
【60995】Re:ページを指定して移動するには? chicyu 09/4/1(水) 20:41 発言[未読]
【60997】Re:ページを指定して移動するには? つん 09/4/1(水) 22:14 発言[未読]
【60998】Re:ページを指定して移動するには? chicyu 09/4/2(木) 6:58 お礼[未読]
【60999】この質問の続きで・・・ chicyu 09/4/2(木) 7:01 発言[未読]
【61000】Re:この質問の続きで・・・ Yuki 09/4/2(木) 8:07 発言[未読]
【61008】Re:この質問の続きで・・・ chicyu 09/4/2(木) 20:19 発言[未読]
【61010】Re:この質問の続きで・・・ つん 09/4/2(木) 22:53 発言[未読]
【61012】Re:この質問の続きで・・・ chicyu 09/4/3(金) 6:37 発言[未読]
【61013】Re:この質問の続きで・・・ Yuki 09/4/3(金) 7:14 発言[未読]

【60982】ページを指定して移動するには?
発言  chicyu  - 09/3/31(火) 8:07 -

引用なし
パスワード
   ページを指定するとそのページに自動的に飛ぶようにする方法は
ありますか?

【60983】Re:ページを指定して移動するには?
発言  超初心者  - 09/3/31(火) 8:42 -

引用なし
パスワード
   ▼chicyu さん:
PageBreakプロパティを調べてみてください。

【60984】Re:ページを指定して移動するには?
発言  chicyu  - 09/3/31(火) 9:46 -

引用なし
パスワード
   今N2に編集したいページ番号を入れるように設定しています。

ページ番号はI3、I38…というように各ページの先頭に入力されているので、
N2に編集したいページ番号を入れてボタンを押すと、そのページの先頭に
飛ぶという設定がしたいのですが…。

PageBreak関数ってのは改ページ指定の関数ですかね?

ごめんなさい。まだまだ勉強不足で…。

【60985】Re:ページを指定して移動するには?
発言  つん  - 09/3/31(火) 10:23 -

引用なし
パスワード
   ▼chicyu さん
おはようござます^^
>今N2に編集したいページ番号を入れるように設定しています。
>
>ページ番号はI3、I38…というように各ページの先頭に入力されているので、
>N2に編集したいページ番号を入れてボタンを押すと、そのページの先頭に
>飛ぶという設定がしたいのですが…。

えー。ということは。
一つのシート内の処理で、ページ番号は先頭ページのセルに入力済みなんですよね?
では、Find関数で、「N2」に入力された数字を、「I列内限定」で検索したらいいんとちゃいますか?

この場合、PageBreakは考えないでいいと思います。


>PageBreak関数ってのは改ページ指定の関数ですかね?

ですです^^

【60986】Re:ページを指定して移動するには?
発言  chicyu  - 09/3/31(火) 11:47 -

引用なし
パスワード
   Sub idou()

  Dim N As Long
  N = ActiveSheet.Range("N2") '
  Set iti = Cells.Find(what:=N, after:="I1")
  If iti Is Nothing Then
  MsgBox "見つかりません"
  Exit Sub
  Else
  iti.Activate
  End If

End Sub

なんかいろいろ組み合わせてみました。
でもうまくいきません。
エラーが出てしまうんです。

何がいけないんでしょう。
ほんと勉強不足でごめんなさい。

set・・・ところがエラー反転します。

【60988】Re:ページを指定して移動するには?
発言  つん  - 09/3/31(火) 13:06 -

引用なし
パスワード
   ▼chicyu さん

とりあえず
>  Set iti = Cells.Find(what:=N, after:="I1")

after の指定がおかしいです。
セルを指定しないといけないので
Range("I1")にせんとね。

あと、Cells.Findじゃ、全セル内で検索しちゃうので、
「N2]をヒットさせて、そこで終わりになります^^;

Set iti = Columns(9).Find(what:=N, after:="I1")

って感じで、「I列」だけ検索かけるようにしないとね。


その他、数字が入力された時とか、小数が入力された時とか・・・
対処が必要そうな気がします。

あ、それから、「iti」も
Dim iti As Range
で宣言して、最期に
Set iti = Nothing
で、解放しといてあげてください。

【60989】Findメソッドの引数の注意事項?
発言  つん  - 09/3/31(火) 14:09 -

引用なし
パスワード
   Find関数・・・とか言うてたけど、メソッドやった^^;

それはともかく
ヘルプに

「引数 LookIn、LookAt、SearchOrder、および MatchByte の設定は、このメソッドが使われるたびに保存されます。次にこのメソッドを使うときに、これらの引数の指定を省略すると、保存された設定が使われます。これらの引数の設定を変更すると、[検索と置換] ダイアログ ボックスに表示される設定が変わります。また、[検索と置換] ダイアログ ボックスで設定を変更すると、保存されている設定が変わります。このような設定の変更によって生じる問題を避けるためには、Find メソッドを使うたびに、これらの引数を明示的に指定します。」

などとあります。
省略可の引数でも、丁寧に指定していくべきのようです。

ややこしいね(T_T)

【60992】Re:ページを指定して移動するには?
発言  chicyu  - 09/4/1(水) 6:36 -

引用なし
パスワード
   つんさんありがとうございます。

ページは飛ぶようになったのですが、なぜか違うページに
とんでしまいます

なんででしょうか?

Sub idou()
  Dim N As Long
  N = ActiveSheet.Range("N2") '
  Dim iti As Range
  Set iti = Columns(9).Find(what:=N, after:=Range("I1"))

  If iti Is Nothing Then
  MsgBox "見つかりません"
  Exit Sub
  Else
  iti.Activate
  End If
  Set iti = Nothing
End Sub

今マクロはこうやって書いてあります。

ほんとすみません。

【60994】Re:ページを指定して移動するには?
発言  つん  - 09/4/1(水) 6:46 -

引用なし
パスワード
   おはようございます

>ページは飛ぶようになったのですが、なぜか違うページに
>とんでしまいます>
>なんででしょうか?

え? 違うページって何ですか?
違うシートってこと?
このコードでそれはありえないような・・・


>
>Sub idou()
>  Dim N As Long
>  N = ActiveSheet.Range("N2") '
>  Dim iti As Range
>  Set iti = Columns(9).Find(what:=N, after:=Range("I1"))
>
>  If iti Is Nothing Then
>  MsgBox "見つかりません"
>  Exit Sub
>  Else
>  iti.Activate
>  End If
>  Set iti = Nothing
>End Sub
>
>今マクロはこうやって書いてあります。
>
>ほんとすみません。

【60995】Re:ページを指定して移動するには?
発言  chicyu  - 09/4/1(水) 20:41 -

引用なし
パスワード
   つんさんほんとありがとうございます。

解決しました。
I列が数式だったのでそれを値変換したら正確に飛びました。

ちなみにもしわかったら教えてください。

もう少し精度が上がったらうれしいのですが、
アクティブにしたセルを、今1・2行目をウィンドウ枠固定しています。
そのすぐ下に表示されるようにしたいのですがそんなことって
できたりしますか?

【60997】Re:ページを指定して移動するには?
発言  つん  - 09/4/1(水) 22:14 -

引用なし
パスワード
   ▼chicyu さん
こんばんは^^

>解決しました。
それは良かったです・・・・けど

>I列が数式だったのでそれを値変換したら正確に飛びました。

こちらで試してみたら、入力されているのが数式でも、その答えと「N2」に入力した値が一致してたら、ちゃんと飛んだみたいやけど?
なんでだ!?(@_@)


>もう少し精度が上がったらうれしいのですが、
>アクティブにしたセルを、今1・2行目をウィンドウ枠固定しています。
>そのすぐ下に表示されるようにしたいのですがそんなことって
>できたりしますか?

えーっと、それはちょっと私にはレベルが高すぎるようです^^;
調べてみますが、他の達人な回答者さんに期待する方が早そうです。

一応、この質問の続きです・・・とでも書き添えて、改めてスレッドたてはったらいいかもしれません。


蛇足ですが、コードを拝見してちょっと気になったことが。

  Dim N As Long
  N = ActiveSheet.Range("N2") '
  Dim iti As Range

と、ありますが、変数の宣言はまとめられた方がいいと思います。
コードの途中に入れると可読性が悪くなっちゃうし。

あと、シートの指定を、

N = ActiveSheet.Range("N2")

この時しかしてないけど、Withステートメントを使うなりして、全部した方が・・・
この場合、ActiveSheetだから問題ないけど、シートの指定を端折ると、アクティブなシートに対する処理になります。

【60998】Re:ページを指定して移動するには?
お礼  chicyu  - 09/4/2(木) 6:58 -

引用なし
パスワード
   つんさん

ほんととっても丁寧にありがとうございました。

とっても勉強になりました。

【60999】この質問の続きで・・・
発言  chicyu  - 09/4/2(木) 7:01 -

引用なし
パスワード
   ページ移動をさせた時に、1・2行目がウィンドウ枠固定してあるのですが、
アクティブになったセルをそのすぐ下に移動してくるような方法はありますか?
わかる方が見えたらぜひ教えてください。

【61000】Re:この質問の続きで・・・
発言  Yuki  - 09/4/2(木) 8:07 -

引用なし
パスワード
   ▼chicyu さん:
>ページ移動をさせた時に、1・2行目がウィンドウ枠固定してあるのですが、
>アクティブになったセルをそのすぐ下に移動してくるような方法はありますか?
>わかる方が見えたらぜひ教えてください。

ApplicationのGotoメソッドを調べてみて下さい。

【61008】Re:この質問の続きで・・・
発言  chicyu  - 09/4/2(木) 20:19 -

引用なし
パスワード
   Yukiさんさっそくありがとうございます。

Application.Goto Reference:=Range("A1"), Scroll:=True

こんな感じで書いたらいいのですよね。
でもrangeの後の指定をどのように書いたらいいのでしょうか?
その時々によって変わるので…。

Sub idou()
  Dim N As Long
  N = ActiveSheet.Range("N2") '
  Dim iti As Range
  Set iti = Columns(9).Find(what:=N, after:=Range("I1"))

  If iti Is Nothing Then
  MsgBox "見つかりません"
  Exit Sub
  Else
  iti.Activate
  End If
  Set iti = Nothing
End Sub

今こんな感じでやっています。これで指定した所を上から3列目に
表示できたらいいなと思うのですが・・・。

ほんと勉強不足でごめんなさい。

【61010】Re:この質問の続きで・・・
発言  つん  - 09/4/2(木) 22:53 -

引用なし
パスワード
   ▼chicyu さん
こんばんは^^

Yukiさんではありませんが^^;

>Application.Goto Reference:=Range("A1"), Scroll:=True

↑で書かれているように、「Reference」に設定するのは、選択したいセルなので、
chicyuさんの場合、Findでヒットしたセルを設定すればいいと思います。
ヒットしたセルは、「iti」という変数に入っているので、「iti」を設定してやればOKです。

「Scroll:=True」で、選択したセルが、左上端に表示されるようです。
縦方向にだけじゃなくて、横方向にも移動しちゃうので、
必要に応じて、列方向にも「ウインドウ枠の固定」を設定した方がいいかもしれません。


>Yukiさん
このようなメソッドは知りませんでした。
(忘れてただけかもしれんけど^^;;;)
勉強になりました(^o^)

【61012】Re:この質問の続きで・・・
発言  chicyu  - 09/4/3(金) 6:37 -

引用なし
パスワード
   つんさんありがとうございます。

やってみたのですが、エラーで黄色反転してしまいます。

一番下のところに追加したらいいんですよね?

【61013】Re:この質問の続きで・・・
発言  Yuki  - 09/4/3(金) 7:14 -

引用なし
パスワード
   ▼chicyu さん:
>つんさんありがとうございます。
>
>やってみたのですが、エラーで黄色反転してしまいます。
>
>一番下のところに追加したらいいんですよね?
違います。

  If iti Is Nothing Then
    MsgBox "見つかりません"
    Exit Sub
  Else
    Application.Goto iti, True <=此処に追加
  End If

3638 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free