Excel VBA質問箱 IV

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

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


12741 / 13646 ツリー ←次へ | 前へ→

【8897】リストボックスで選んだシートへ移動したい 初心者です! 03/11/7(金) 18:13 質問
【8899】Re:リストボックスで選んだシートへ移動した... INA 03/11/7(金) 18:25 回答
【8905】Re:リストボックスで選んだシートへ移動した... 初心者です! 03/11/7(金) 21:41 質問
【8909】Re:リストボックスで選んだシートへ移動した... kein 03/11/7(金) 21:56 回答
【8911】Re:リストボックスで選んだシートへ移動した... 初心者です! 03/11/7(金) 22:41 質問
【8915】Re:リストボックスで選んだシートへ移動した... kein 03/11/8(土) 3:56 回答
【8916】Re:リストボックスで選んだシートへ移動した... kein 03/11/8(土) 4:00 回答
【8921】Re:リストボックスで選んだシートへ移動した... 初心者です! 03/11/8(土) 22:50 お礼

【8897】リストボックスで選んだシートへ移動したい
質問  初心者です!  - 03/11/7(金) 18:13 -

引用なし
パスワード
   はじめまして。VBAを始めてまだ1ヶ月未満の超初心者です・・・。
不可能な質問をしているのかもしれませんので、その場合はご指摘ください。
ワークシートが30枚あり、4枚目〜25枚目までを個人別のデータ入力用にしています。
個人データの一覧表(個人別にデータがあるので、4枚目は○○さん、5枚目は
△△さんという対応表のようなもの<シート名と個人名>)を2枚目に作っています。このデータをリストボックス(又はコンボボックス)に表示
させ、クリック又はダブルクリックで選択したシートへ移動したいのですが、やり方がわかりません。
なにがしたいのかというと、ワークシートがたくさんあるので、選んだシートへ
スムーズに移動したいということなんです。特にリストボックスにこだわって
いるわけではないのですが・・・。
どのようにすればよいのかアドバイスお願いいたします。
無理なことをしているかもしれませんので、その場合はご指摘ください。
どうぞよろしくお願いします。

【8899】Re:リストボックスで選んだシートへ移動し...
回答  INA  - 03/11/7(金) 18:25 -

引用なし
パスワード
   ユーザーフォーム上のリストボックスをお考えですか?
それとも目次?シートから、別シートへジャンプするように
お考えですか?
それと対応表のレイアウトは、どんな感じでしょうか?

【8905】Re:リストボックスで選んだシートへ移動し...
質問  初心者です!  - 03/11/7(金) 21:41 -

引用なし
パスワード
   こんばんは、お返事ありがとうございます。
現在はユーザーフォーム上のリストボックスを考えております。
○○さんのワークシートへデータ入力が終了したら、次は△△さんのワークシートへ
ジャンプする、ということでユーザーフォーム利用が楽では?と思いました。
対応表のレイアウトは、A列がシートの見出し(No.1〜No.20という表記です)B列が
ID番号、C列が氏名です。
プログラムを実行する上で、必要であれば対応表のレイアウトや、
シートの見出しが変更になっても特に問題はないです。(便利になるようにどんどん
変更するつもりでいます)
以上のような構成です。アドバイスをどうぞよろしくお願い致します。

▼INA さん:
>ユーザーフォーム上のリストボックスをお考えですか?
>それとも目次?シートから、別シートへジャンプするように
>お考えですか?
>それと対応表のレイアウトは、どんな感じでしょうか?

【8909】Re:リストボックスで選んだシートへ移動し...
回答  kein  - 03/11/7(金) 21:56 -

引用なし
パスワード
   >○○さんのワークシートへデータ入力が終了したら、次は△△さんのワークシートへ
>ジャンプ
つまり「特定のシートから特定のシートに飛ぶ」という処理なら、イベントマクロ
の方が楽だと思います。例えば Sheet1→Sheet3→Sheet2 というように開きたい
場合、入力が終わった時点でA列のセルを右クリックする、ということにして

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
  Select Case Sh.Name
   Case "Sheet1"
     Sheets("Sheet3").Activate
   Case "Sheet3"
     Sheets("Sheet2").Activate
  End Select
End Sub

というマクロを ThisWorkbookモジュールに入れます。
もし、入力する最後のセル位置が決まっているなら、Workbook_SheetChange イベント
に変更すれば、なお便利でしょう。コードは少し違ってきますが。

【8911】Re:リストボックスで選んだシートへ移動し...
質問  初心者です!  - 03/11/7(金) 22:41 -

引用なし
パスワード
   keinさま、こんばんはお返事ありがとうございました。
書いていただいたマクロをさっそく試してみました。
この場合、特定のシート→特定のシートですよね?(違っていたらごめんなさい)
私の質問の仕方が悪かったようですみません。
20人程度のリストから選んだその人専用のワークシートへ移動したいんです。
なので、移動する順番はバラバラです。
入力のみでしたら、ワークシートを決めた順番に移動していけばよいので、
お教えいただいたマクロで十分なのですが、後で、入力した個人別のデータを見ようと
思ったときにリストから選んだシートへジャンプできたら便利なので
その方法を探しています。
☆右クリックでシート移動って考えたことがなかったのでメニューシートなどで、
ぜひ役立てたいと思っています。ありがとうございました。
質問がわかりにくくてすみませんでした。よいお考えがありましたら
どうぞよろしくお願い致します。

【8915】Re:リストボックスで選んだシートへ移動し...
回答  kein  - 03/11/8(土) 3:56 -

引用なし
パスワード
   分かりました。では先の右クリックイベントを改造して、Index が 4〜25までの
シート名をリストにした、ドロップダウンボックスを出すようにしてみます。
↓これを ThisWorkbookモジュールに入れて下さい。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  Dim Lp As Single, Tp As Single, Wp As Single, Hp As Single
  Dim i As Integer
 
  Cancel = True: Sh.DropDowns.Delete
  With Target
   Lp = .Left: Tp = .Top: Wp = .Width * 1.5: Hp = .Height
  End With
  With Sh.DropDowns.Add(Lp, Tp, Wp, Hp)
   For i = 4 To 25
     If i <> Sh.Index Then
      .AddItem Worksheets(i).Name
     End If
   Next i
   .OnAction = "JumpS"
  End With
End Sub

そして標準モジュールに↓これを入れて下さい。

Sub JumpS()
  Dim i As Integer
 
  With ActiveSheet.DropDowns(Application.Caller)
   i = .ListIndex
   If i < 1 Then Exit Sub
   .Delete
  End With
  Worksheets(i).Activate
End Sub

シート上のセルをどこでも右クリックすれば、そこへドロップダウンが出てきます。

【8916】Re:リストボックスで選んだシートへ移動し...
回答  kein  - 03/11/8(土) 4:00 -

引用なし
パスワード
   すいません、大変な間違いがありました。 JumpS の方を↓これに変えて下さい。

Sub JumpS()
  Dim i As Integer, StS As String
 
  With ActiveSheet.DropDowns(Application.Caller)
   i = .ListIndex
   If i < 1 Then Exit Sub
   StS = .List(i)
   .Delete
  End With
  Worksheets(StS).Activate
End Sub

【8921】Re:リストボックスで選んだシートへ移動し...
お礼  初心者です!  - 03/11/8(土) 22:50 -

引用なし
パスワード
   keinさま、お返事が遅くなってすみません。
お教えいただいたコードをそのまま使用させていただきました。
とても便利で使いやすくなりました。

この度はありがとうございました。
まだまだ勉強不足でしてまた質問をするかもしれません。
そのときはどうぞよろしくお願いします。

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